diff options
author | Glenn Morris <rgm@gnu.org> | 2007-09-06 04:50:28 +0000 |
---|---|---|
committer | Glenn Morris <rgm@gnu.org> | 2007-09-06 04:50:28 +0000 |
commit | 8cf51b2c2f18417403f27fdc215f369af887d89b (patch) | |
tree | 32b8f5cdf35f0c2e674c0f6a3d2e842396080b32 /doc | |
parent | 19e364e29522a20357a236d8501725db47f7feee (diff) | |
download | emacs-8cf51b2c2f18417403f27fdc215f369af887d89b.tar.gz |
Move here from ../../man
Diffstat (limited to 'doc')
59 files changed, 56803 insertions, 0 deletions
diff --git a/doc/emacs/.gitignore b/doc/emacs/.gitignore new file mode 100644 index 00000000000..3ff56b474dd --- /dev/null +++ b/doc/emacs/.gitignore @@ -0,0 +1,23 @@ +*.aux +*.cp +*.cps +*.dvi +*.fn +*.fns +*.ky +*.kys +*.log +*.op +*.ops +*.pdf +*.pg +*.pgs +*.ps +*.tmp +*.toc +*.tp +*.tps +*.vr +*.vrs +Makefile +makefile diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog new file mode 100644 index 00000000000..51803a75727 --- /dev/null +++ b/doc/emacs/ChangeLog @@ -0,0 +1,8267 @@ +2007-09-06 Glenn Morris <rgm@gnu.org> + + * Move manual sources from man/ to subdirectories of doc/. + Split into the Emacs manual in emacs/, and other manuals in misc/. + * Makefile.in (INFO_TARGETS, DVI_TARGETS): Reduce to just the Emacs + manual. + (infodir): New variable. + (info): Use $infodir. + (emacsman): Delete target, not needed any more. + Move all targets that are not the Emacs manual to misc/Makefile.in. + (mostlyclean): Remove `gnustmp'. + * makefile.w32-in (INFO_TARGETS, DVI_TARGETS): Reduce to just the Emacs + manual. + (MULTI_INSTALL_INFO, ENVADD): Go up one more level. + (emacsman): Delete target, not needed any more. + (clean): Remove all info files but Emacs manual. + Move all targets that are not the Emacs manual to misc/Makefile.in. + * emacs-xtra.texi, emacs.texi (setfilename): Go up one more level. + + * Makefile.in (INFOSOURCES): Delete. + (.SUFFIXES): Use $(TEXI2DVI) rather than texi2dvi. + (mostlyclean): Add *.op, *.ops. Move *.aux *.cps *.fns *.kys *.pgs + *.vrs *.toc here... + (maintainer-clean): ...from here. + +2007-09-05 Glenn Morris <rgm@gnu.org> + + * custom.texi (Safe File Variables): Clarify `!' and risky variables. + +2007-09-01 Jay Belanger <jay.p.belanger@gmail.com> + + * calc.texi (Date Conversions): Clarify definition of + Julian day numbering. + (Date Forms): Clarify definition of Julian day numbering; + add some history. + +2007-08-30 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Version 5.07 + +2007-08-29 Glenn Morris <rgm@gnu.org> + + * emacs.texi (EMACSVER): Increase to 23.0.50. + +2007-08-24 IRIE Tetsuya <irie@t.email.ne.jp> (tiny change) + + * message.texi (MIME): Replace mml-attach with mml-attach-file. + +2007-08-22 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Adding hyperlink types): New section. + (Embedded LaTeX): Chapter updated because of LaTeX export. + (LaTeX export): New section. + (Using links out): New section. + +2007-08-22 Glenn Morris <rgm@gnu.org> + + * faq.texi (Learning how to do something): Refcards now in + etc/refcards/ directory. + +2007-08-22 Michael Albinus <michael.albinus@gmx.de> + + * tramp.texi (Remote Programs): Persistency file must be cleared when + changing `tramp-remote-path'. + (Filename Syntax): Don't use @var{} constructs inside the @trampfn + macro. + +2007-08-17 Eli Zaretskii <eliz@gnu.org> + + * basic.texi (Position Info): Add index entry for face at point. + Mention that character faces are also displayed by "C-u C-x =". + +2007-08-17 Jay Belanger <jay.p.belanger@gmail.com> + + * calc.texi: Move contents to beginning of file. + (Algebraic Entry): Fix the formatting of an example. + +2007-08-15 Jay Belanger <jay.p.belanger@gmail.com> + + * calc.texi (Basic Operations on Units): Mention exact versus + inexact conversions. + +2007-08-14 Jay Belanger <jay.p.belanger@gmail.com> + + * calc.texi (Basic Operations on Units): Mention default + values for new units. + (Quick Calculator Mode): Mention that binary format will + be displayed. + +2007-08-14 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Selecting a Group): Mention gnus-maximum-newsgroup. + +2007-08-10 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (NNTP): Mention nntp-xref-number-is-evil. + +2007-08-08 Glenn Morris <rgm@gnu.org> + + * glossary.texi (Glossary): Deprecate `iff'. + * gnus.texi, sieve.texi: Replace `iff'. + +2007-08-07 Chong Yidong <cyd@stupidchicken.com> + + * files.texi (File Conveniences): Document point motion keys in Image + mode. + +2007-08-03 Jay Belanger <jay.p.belanger@gmail.com> + + * calc.texi (Basic Graphics): Mention the graphing of error + forms. + (Graphics Options): Mention how `g s' handles error forms. + (Curve Fitting): Mention plotting the curves. + (Standard Nonlinear Models): Add additional models. + (Curve Fitting Details): Mention the Levenberg-Marquardt method. + (Linear Fits): Correct result. + +2007-08-01 Alan Mackenzie <acm@muc.de> + + * cc-mode.texi (Mailing Lists and Bug Reports): Correct "-no-site-file" + to "--no-site-file". + +2007-07-29 Michael Albinus <michael.albinus@gmx.de> + + * tramp.texi (Frequently Asked Questions): Point to mode line + extension in Emacs 23.1. + + * trampver.texi: Update release number. + +2007-07-27 Glenn Morris <rgm@gnu.org> + + * calc.texi (Copying) + * emacs.texi (Copying): Include license text from gpl.texi, rather than + in-line. + + * gpl.texi: New file with text of GPL. + * Makefile.in (EMACSSOURCES): Add gpl.texi. + +2007-07-26 Dan Nicolaescu <dann@ics.uci.edu> + + * vc2-xtra.texi (Customizing VC): Add GIT and HG. + + * dired.texi (Wdired): Mention C-x C-q key binding. + +2007-07-28 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (GDB Graphical Interface): Qualify use of "M-x gdba". + +2007-07-25 Glenn Morris <rgm@gnu.org> + + * calc.texi (Copying) + * emacs.texi (Copying): Replace license with GPLv3. + + * Relicense all FSF files to GPLv3 or later. + +2007-07-24 Glenn Morris <rgm@gnu.org> + + * calendar.texi (Writing Calendar Files): cal-tex-diary etc only work + for some calendars. + +2007-07-23 Nick Roberts <nickrob@snap.net.nz> + + * screen.texi (Mode Line): Describe new mode-line flag that shows if + default-directory for the current buffer is on a remote machine. + +2007-07-22 Michael Albinus <michael.albinus@gmx.de> + + Sync with Tramp 2.1.10. + + * tramp.texi (trampfn): Expand macro implementation in order to handle + empty arguments. + (trampfnmhl, trampfnuhl, trampfnhl): Remove macros. Replace all + occurencies by trampfn. + (Frequently Asked Questions): Extend example code for host + identification in the modeline. Add bbdb to approaches shortening Tramp + file names to be typed. + + * trampver.texi: Update release number. + +2007-07-21 Eli Zaretskii <eliz@gnu.org> + + * vc2-xtra.texi (Customizing VC) <vc-handled-backends>: Update the + default value. + +2007-07-21 Richard Stallman <rms@gnu.org> + + * files.texi (Why Version Control?): Improve previous change. + +2007-07-18 Eric S. Raymond <esr@snark.thyrsus.com> + + * files.texi (Why Version Control?): New node. + +2007-07-17 Michael Albinus <michael.albinus@gmx.de> + + * tramp.texi: Move @setfilename ../info/tramp up, outside the header + section. Reported by <poti@potis.org>. + (Remote processes): Arguments of the program to be debugged are taken + literally. + (Frequently Asked Questions): Simplify recentf example. + +2007-07-14 Karl Berry <karl@gnu.org> + + * info.texi (@copying): New Back-Cover Text. + + * info.texi (Quitting Info): Move to proper place in source. + (Reported by Benno Schulenberg.) + +2007-07-13 Eli Zaretskii <eliz@gnu.org> + + * Makefile.in (../info/emacs-mime): Use --enable-encoding. + + * makefile.w32-in ($(infodir)/emacs-mime): Ditto. + + * emacs-mime.texi: Add @documentencoding directive. + +2007-07-12 Nick Roberts <nickrob@snap.net.nz> + + * tramp.texi (Remote processes): Add an anchor to the subsection + "Running a debugger on a remote host". + + * building.texi (Starting GUD): Add xref to this anchor. + +2007-07-12 Michael Albinus <michael.albinus@gmx.de> + + * tramp.texi (Remote processes): Don't call it "experimental" any + longer. Add subsection about running a debugger on a remote host. + +2007-07-10 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Properties and columns): Chapter rewritten. + +2007-07-08 Michael Albinus <michael.albinus@gmx.de> + + * tramp.texi: + * trampver.texi: Migrate to Tramp 2.1. + +2007-07-02 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Properties): New chapter. + +2007-07-02 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus-faq.texi ([3.2]): Fix locating of environment variables in the + Control Panel. + + * gnus.texi (Misc Article): Add index entry for + gnus-single-article-buffer. + +2007-06-27 Andreas Seltenreich <andreas@gate450.dyndns.org> + + * gnus.texi (Starting Up): Fix typo. + +2007-06-25 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Asynchronous Fetching): Fix typo. + +2007-06-24 Karl Berry <karl@gnu.org> + + * emacs.texi: new Back-Cover Text. + +2007-06-20 Jay Belanger <jay.p.belanger@gmail.com> + + * calc.texi:Change ifinfo to ifnottex (as appropriate) throughout. + (About This Manual): Remove redundant information. + (Getting Started): Mention author. + (Basic Arithmetic, Customizing Calc): Make description of the + variable `calc-multiplication-has-precedence' match its new effect. + +2007-06-19 Jay Belanger <jay.p.belanger@gmail.com> + + * calc.texi (Basic Arithmetic, Customizing Calc): Mention + the variable `calc-multiplication-has-precedence'. + +2007-06-19 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Tag): Section swapped with node Timestamps. + (Formula syntax for Lisp): Document new `L' flag. + +2007-06-06 Andreas Seltenreich <andreas@gate450.dyndns.org> + + * gnus.texi (Misc Group Stuff, Summary Buffer) + (Server Commands, Article Keymap): Fix typo. s/function/command/. + +2007-06-07 Alan Mackenzie <acm@muc.de> + + * display.texi (Optional Mode Line): Document the new form of + line+column numbers, "(561,2)". + +2007-06-06 Juanma Barranquero <lekktu@gmail.com> + + * cc-mode.texi (Comment Commands, Getting Started, Style Variables): + * gnus.texi (Article Buttons, Mail Source Customization) + (Sending or Not Sending, Customizing NNDiary): + * maintaining.texi (Create Tags Table): + * message.texi (Message Headers): + * mh-e.texi (HTML): Fix typos. + +2007-06-07 Michael Albinus <michael.albinus@gmx.de> + + Sync with Tramp 2.0.56. + + * tramp.texi (Frequently Asked Questions): Improve ~/.zshrc + settings. Reported by Ted Zlatanov <tzz@lifelogs.com>. + +2007-06-02 Chong Yidong <cyd@stupidchicken.com> + + * Version 22.1 released. + +2007-05-26 Michael Olson <mwolson@gnu.org> + + * erc.texi (Modules): Fix references to completion modules. + +2007-05-09 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Running NNDiary): Use ~/.gnus.el instead of gnusrc. + +2007-05-09 Didier Verna <didier@xemacs.org> + + * gnus.texi (Email Based Diary): New. Proper documentation for the + nndiary back end and the gnus-diary library. + +2007-05-07 Karl Berry <karl@gnu.org> + + * emacs.texi (EMACSVER): Back to 22. + +2007-05-06 Richard Stallman <rms@gnu.org> + + * maintaining.texi (Create Tags Table): Clean up previous change. + +2007-05-05 Francesco Potort,Al(B <pot@gnu.org> + + * maintaining.texi (Create Tags Table): Add text about the dangers of + making symbolic links to tags files. + +2007-05-04 Karl Berry <karl@gnu.org> + + * emacs.texi (EMACSVER) [smallbook]: 22.1 for printed version, not 22. + +2007-05-03 Karl Berry <karl@gnu.org> + + * emacs.texi (EMACSVER) [smallbook]: 22 for printed version. + + * .cvsignore (*.pdf): New entry. + + * texinfo.tex: Update from current version for better pdf generation. + + * emacs.texi (\urlcolor, \linkcolor) [smallbook]: \let to \Black + for printing. + +2007-05-01 Richard Stallman <rms@gnu.org> + + * cmdargs.texi (Initial Options): Under --batch, mention --eval. + +2007-04-30 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Article Highlighting): Clarify gnus-cite-parse-max-size. + +2007-04-28 Glenn Morris <rgm@gnu.org> + + * ack.texi (Acknowledgments): + * anti.texi (Antinews): + * faq.texi (New in Emacs 22): + * programs.texi (Program Modes): Restore mention of python.el pending + consideration of legal status. + +2007-04-28 Richard Stallman <rms@gnu.org> + + * files.texi (File Names): Fixes to ~ description on MS systems. + +2007-04-27 J.D. Smith <jdsmith@as.arizona.edu> + + * idlwave.texi: Minor updates for IDLWAVE 6.1. + +2007-04-26 Glenn Morris <rgm@gnu.org> + + * emacs.texi (EMACSVER): Increase to 22.1.50. + +2007-04-25 Karl Berry <karl@gnu.org> + + * emacs.texi: Improve line breaks on copyright page, + similar layout to lispref, 8.5x11 by default. + + * dired.texi (Image-Dired): Improve line break, fix typo. + +2007-04-24 Chong Yidong <cyd@stupidchicken.com> + + * programs.texi (Program Modes): + * faq.texi (New in Emacs 22): + * anti.texi (Antinews): + * ack.texi (Acknowledgments): python.el removed. + +2007-04-23 Jay Belanger <jay.p.belanger@gmail.com> + + * calc.texi (Reporting bugs): Update maintainer's address. + +2007-04-23 Chong Yidong <cyd@stupidchicken.com> + + * display.texi (Highlight Interactively): Correct description of + hi-lock-file-patterns-policy. + + * files.texi (File Archives): Mention self-extracting executables. + +2007-04-23 Eli Zaretskii <eliz@gnu.org> + + * search.texi (Unconditional Replace, Query Replace): Add xref to + "Replacement and Case". + +2007-04-22 Chong Yidong <cyd@stupidchicken.com> + + * dired.texi (Image-Dired): Move from Thumbnails node. + * misc.texi (Thumbnails): Node deleted. + * emacs.texi (Top): Update node listing. + + * files.texi (File Conveniences): + * ack.texi (Acknowledgments): + * faq.texi (New in Emacs 22): Rename "tumme" to "image-dired". + +2007-04-21 Richard Stallman <rms@gnu.org> + + * display.texi (Highlight Interactively): Correct previous change. + Clarify doc of hi-lock-find-patterns, and move new features into it. + +2007-04-20 David Koppelman <koppel@ece.lsu.edu> + + * display.texi (Highlight Interactively): Document + hi-lock-file-patterns-policy. + +2007-04-20 Martin Rudalics <rudalics@gmx.at> + + * display.texi (Scrolling): Fix typo. + +2007-04-15 Jay Belanger <belanger@truman.edu> + + * calc.texi (Title page): Remove the date. + (Basic Arithmetic): Emphasize that / binds less strongly than *. + (The Standard Calc Interface): Change trail title. + (Floats): Mention that when non-decimal floats are entered, only + approximations are stored. + (Copying): Move to the appendices. + (GNU Free Documentation License): Add as an appendix. + +2007-04-15 Chong Yidong <cyd@stupidchicken.com> + + * ada-mode.texi, autotype.texi, cc-mode.texi, cl.texi: + * dired-x.texi, ebrowse.texi, ediff.texi: + * emacs-mime.texi, erc.texi, eshell.texi: + * eudc.texi, flymake.texi, forms.texi, gnus.texi: + * idlwave.texi, message.texi, newsticker.texi, org.texi: + * pcl-cvs.texi, pgg.texi, rcirc.texi, reftex.texi, sc.texi: + * ses.texi, sieve.texi, smtpmail.texi, speedbar.texi: + * tramp.texi, url.texi, vip.texi, viper.texi, widget.texi: + * woman.texi: Include GFDL. + + * doclicense.texi: Remove node heading, so that it can be included by + other files. + + * emacs.texi: Insert node heading for GFDL. + + * dired-x.texi: Relicence under GFDL. Remove date from title page. + + * calc.texi (Algebraic Tutorial): Emphasize that / binds less strongly + than *. + +2007-04-14 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Formula syntax for Calc): Emphasize the operator precedence + in Calc. + +2007-04-14 Eli Zaretskii <eliz@gnu.org> + + * cmdargs.texi (Colors): Qualify "color of window" index entry by + "command line". + + * display.texi (Faces): Refer to "Creating Frames" for face + and other frame customizations in .emacs. + + * frames.texi (Creating Frames): Mention that face customizations can + be put in .emacs. Add index entries. + +2007-04-12 Richard Stallman <rms@gnu.org> + + * glossary.texi (Glossary): Explain `iff'. + +2007-04-11 Karl Berry <karl@gnu.org> + + * gnu.texi (Top), + * macos.texi (Mac Font Specs), + * anti.texi (Antinews), + * xresources.texi (Resources), + * misc.texi (Emulation), + * calendar.texi (Daylight Saving), + * dired.texi (Dired and Find), + * rmail.texi (Remote Mailboxes), + * sending.texi (Mail Headers), + * programs.texi (Which Function), + * files.texi (Recover), + * buffers.texi (Uniquify), + * frames.texi (Wheeled Mice), + * killing.texi (Rectangles): Wording to improve breaks in + 8.5x11 format. + * mule.texi (Language Environments): \hbadness=10000 since there's + no way to reword. + * emacs.texi (smallbook): New @set to more easily switch between + smallbook and 8.5x11. + +2007-04-11 Richard Stallman <rms@gnu.org> + + * files.texi (File Conveniences): Add xref to Tumme. + Delete text about Thumbnail mode. + +2007-04-09 Romain Francoise <romain@orebokech.com> + + * faq.texi (New in Emacs 22): Mention improvements to the Windows and + Mac OS ports. Make it clear that mouse-1 complements and doesn't + replace mouse-2. + +2007-04-09 Alan Mackenzie <acm@muc.de> + + * cmdargs.texi (Initial Options): Call "inhibit-splash-screen" by its + new name. Insert concept index entries. + +2007-04-08 Richard Stallman <rms@gnu.org> + + * url.texi: Fix some indexing. + (Disk Caching): Drop discussion of old/other Emacs versions. + +2007-04-08 Chong Yidong <cyd@stupidchicken.com> + + * display.texi (Standard Faces): Document prefix arg for + list-faces-display. + + * rmail.texi (Rmail Scrolling): Document rmail-end-of-message. + + * woman.texi (Word at point, Interface Options): woman-topic-at-point + renamed to woman-use-topic-at-point. Document new behavior. + +2007-04-07 Chong Yidong <cyd@stupidchicken.com> + + * url.texi (Disk Caching): Say Emacs 21 "and later". + + * cc-mode.texi (Font Locking Preliminaries): Link to Emacs manual node + on Font locking which now mentions JIT lock. + + * killing.texi (Deletion): Rewrite description of M-\ prefix argument. + + * files.texi (Misc File Ops): Rewrite description of + insert-file-literally. + +2007-04-01 Michael Olson <mwolson@gnu.org> + + * erc.texi: Update for the ERC 5.2 release. + +2007-03-31 David Kastrup <dak@gnu.org> + + * woman.texi (Topic, Interface Options): Explain changes semantics of + woman-manpath in order to consider MANPATH_MAP entries. + +2007-03-31 Eli Zaretskii <eliz@gnu.org> + + * misc.texi (Printing): Postscript -> PostScript. + + * emacs-mime.texi (Non-MIME): Postscript -> PostScript. + + * ack.texi (Acknowledgments): Postscript -> PostScript. + + * custom.texi (Init File, Init Non-ASCII): Fix last change. + + * emacs.texi (Top): Fix the menu due to the change in custom.texi + below. + +2007-03-30 Chong Yidong <cyd@stupidchicken.com> + + * custom.texi (Non-ASCII Rebinding): Node deleted. Material moved to + Init Non-ASCII. + (Init Rebinding, Init Syntax): Link to Init Non-ASCII instead. + (Init Non-ASCII): New node. + +2007-03-28 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * macos.texi (Mac Font Specs): Mention AppleAntiAliasingThreshold. + +2007-03-26 Richard Stallman <rms@gnu.org> + + * pgg.texi (Caching passphrase): Clean up previous change. + +2007-03-25 Thien-Thi Nguyen <ttn@gnu.org> + + * gnus.texi (Setting Process Marks): Fix typo. + +2007-03-25 Romain Francoise <romain@orebokech.com> + + * faq.texi (New in Emacs 22): Reorganize using an itemized list for + readability, and include various fixes by Daniel Brockman, Nick Roberts + and Dieter Wilhelm. + +2007-03-24 Thien-Thi Nguyen <ttn@gnu.org> + + * gnus.texi (Splitting Mail): Reword "splitting"-as-adj to be -as-noun. + + * gnus.texi (Mail Source Specifiers): Fix typo. + +2007-03-22 Ralf Angeli <angeli@caeruleus.net> + + * reftex.texi (Imprint): Update maintainer information. + +2007-03-15 Katsumi Yamaoka <yamaoka@jpl.org> + + * message.texi (Message Buffers): Update documentation for + message-generate-new-buffers. + +2007-03-15 Daiki Ueno <ueno@unixuser.org> + + * pgg.texi (Caching passphrase): Describe pgg-passphrase-coding-system. + +2007-03-21 Glenn Morris <rgm@gnu.org> + + * eshell.texi (Known problems): Emacs 22 comes with eshell 2.4.2. + +2007-03-19 Chong Yidong <cyd@stupidchicken.com> + + * eshell.texi (Known problems): Emacs 21 -> 22. + + * cc-mode.texi (Performance Issues): Update note about 21.3 to 22.1. + +2007-03-18 Jay Belanger <belanger@truman.edu> + + * calc.texi (Time Zones): Mention that the DST rules changed in 2007. + +2007-03-12 Glenn Morris <rgm@gnu.org> + + * calc.texi (Time Zones): Switch to new North America DST rule. + + * calendar.texi, emacs.texi (Daylight Saving): Rename node from + "Daylight Savings". + + * calc.texi, calendar.texi: Replace "daylight savings" with "daylight + saving" in text throughout. + +2007-03-11 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de> + + * gnus.texi (Mail and Post): Update documentation for gnus-user-agent. + The variable now uses a list of symbols instead of just a symbol. + Reported by Christoph Conrad <christoph.conrad@gmx.de>. + +2007-03-06 Romain Francoise <romain@orebokech.com> + + * faq.texi (New in Emacs 22): Don't say "now" too much. Add MH-E to + new packages, and mention Gnus update. + +2007-03-04 Richard Stallman <rms@gnu.org> + + * custom.texi (Safe File Variables): Minor correction. + +2007-02-27 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (NNTP): Mention nntp-never-echoes-commands and + nntp-open-connection-functions-never-echo-commands. + +2007-02-28 Thien-Thi Nguyen <ttn@gnu.org> + + * rmail.texi (Movemail): Add internal ref. + Don't indent the intro for the PROTO table. + Format PROTO table items with @code. + +2007-02-27 Chong Yidong <cyd@stupidchicken.com> + + * pgg.texi (Caching passphrase): Document gpg-agent usage, gpg-agent + problems on the console, and security risk in not using gpg-agent. + +2007-02-26 Nick Roberts <nickrob@snap.net.nz> + + * building.texi: Remove references to bashdb. + +2007-02-25 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (The spreadsheet): Renamed from "Table calculations". + Completely reorganized and rewritten. + (CamelCase links): Section removed. + (Repeating items): New section. + (Tracking TODO state changes): New section. + (Agenda views): Chapter reorganized and rewritten. + (HTML export): Section rewritten. + (Tables in arbitrary syntax): New section. + (Summary): Better feature summary. + (Activation): Document problem with cut-and-paste of Lisp code + from PDF files. + (Visibility cycling): Document indirect buffer use. + (Structure editing): Document sorting. + (Remember): Section rewritten. + (Time stamps): Better description of time stamp types. + (Tag searches): Document regular expression search for tags. + (Stuck projects): New section. + (In-buffer settings): New keywords. + (History and Acknowledgments): Updated description. + +2007-02-24 Alan Mackenzie <acm@muc.de> + + * cc-mode.texi (Movement Commands): Insert two missing command names. + (Getting Started): Slight wording correction (use conditional). + +2007-02-22 Kim F. Storm <storm@cua.dk> + + * widget.texi (User Interface, Basic Types): Document need to put some + text before the %v escape in :format string in editable-field widget. + +2007-02-19 Juanma Barranquero <lekktu@gmail.com> + + * mule.texi (Language Environments): Update list of supported language + environments. + +2007-02-18 Romain Francoise <romain@orebokech.com> + + * pcl-cvs.texi (Miscellaneous commands): q runs `cvs-bury-buffer', not + `cvs-mode-quit'. + +2007-02-14 Kim F. Storm <storm@cua.dk> + + * building.texi (Grep Searching): Fix lgrep doc. + +2007-02-12 Chong Yidong <cyd@stupidchicken.com> + + * back.texi: Remove unused file. + +2007-02-10 Markus Triska <markus.triska@gmx.at> + + * widget.texi (Programming Example): Put constant strings in :format. + +2007-02-07 Juanma Barranquero <lekktu@gmail.com> + + * faq.texi (Fullscreen mode on MS-Windows): New node. + +2007-02-05 Francesco Potort,Al(B <pot@gnu.org> + + * maintaining.texi (Tag Syntax): Now --members is the default for + etags, not for ctags yet. + +2007-02-04 David Kastrup <dak@gnu.org> + + * faq.texi (AUCTeX): Update version number. Should probably be done + for other packages as well. + +2007-02-03 Eli Zaretskii <eliz@gnu.org> + + * emacs.texi (Top): Update the top-level menus. Make the detailed menu + headers compliant with Texinfo guidelines and with what texnfo-upd.el + expects. Add comments to prevent people from inadvertently modifying + the key parts needed by `texinfo-multiple-files-update'. + +2007-01-29 Chong Yidong <cyd@stupidchicken.com> + + * frames.texi (Secondary Selection): Window clicked does not matter + when mouse-yank-at-point is non-nil. + +2007-01-28 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de> + + * gnus.texi (Batching Agents): Fix example. Reported by Tassilo Horn + <tassilo@member.fsf.org>. + +2007-01-27 Eli Zaretskii <eliz@gnu.org> + + * msdog.texi (ls in Lisp): Document ls-lisp-format-time-list and + ls-lisp-use-localized-time-format. + +2007-01-20 Markus Triska <markus.triska@gmx.at> + + * flymake.texi (Flymake mode): find-file-hook instead of ...-hooks. + +2007-01-13 Michael Olson <mwolson@gnu.org> + + * erc.texi (Modules): Mention capab-identify module. + +2007-01-16 Glenn Morris <rgm@gnu.org> + + * abbrevs.texi (Editing Abbrevs): Describe how to disable a + system abbrev. + +2007-01-11 Richard Stallman <rms@gnu.org> + + * msdog.texi (Windows Keyboard): Another small cleanup. + +2007-01-10 Richard Stallman <rms@gnu.org> + + * msdog.texi (Windows Keyboard): Yet another try to make + everyone happy with that passage. + +2007-01-05 Richard Stallman <rms@gnu.org> + + * anti.texi (Antinews): Mention M-x shell scrolling. + +2007-01-05 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Watch Expressions): Describe gdb-max-children. + +2007-01-05 Michael Olson <mwolson@gnu.org> + + * erc.texi (Getting Started): Update for /RECONNECT command. + +2007-01-04 Richard Stallman <rms@gnu.org> + + * ebrowse.texi: Change C-c b to C-c C-m. + + * msdog.texi (Windows Keyboard): Clarify previous change. + +2007-01-03 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Customizing Articles): Use index entries for gnus-treat-* + variables only in info to avoid redundant entries in the printed + manual. + +2007-01-02 Richard Stallman <rms@gnu.org> + + * custom.texi (Changing a Variable): Minor clarification. + (Specific Customization): customize-customized => customize-unsaved. + + * entering.texi (Entering Emacs): Clean up text about restarting + Emacs for each file. + + * misc.texi (Shell Options): Minor cleanup. + + * msdog.texi (Windows Keyboard): Explain that Windows was incompatible + with Emacs, not vice versa. + + * programs.texi (Symbol Completion): Recommend customizing + window manager. + + * xresources.texi (Resources): Minor fix. + +2007-01-02 Daiki Ueno <ueno@unixuser.org> + + * message.texi (Using PGP/MIME): Document gpg-agent usage. + +2007-01-02 Reiner Steib <Reiner.Steib@gmx.de> + + * message.texi (Security): Split into sub-nodes. + +2007-01-01 Alan Mackenzie <acm@muc.de> + + * cc-mode.texi ("Limitations and Known Bugs"): Document problems with + eval-after-load in Emacs <=21 and a workaround. Document that + trigraphs are not supported. + +2007-01-01 Alan Mackenzie <acm@muc.de> + + * cc-mode.texi ("Filling and Breaking"): Amend the doc for + c-context-line-break. When invoked within a string, preserve + whitespace. Add a backslash only when also in a macro. + +2007-01-01 Alan Mackenzie <acm@muc.de> + + * cc-mode.texi ("Choosing a Style"): Mention c-file-style. + +2007-01-01 Alan Mackenzie <acm@muc.de> + + * cc-mode.texi ("Movement Commands", "Sample .emacs File"): C-M-[ae] + are now bound by default to c-\(beginning\|end\)-of-defun by default. + +2007-01-01 Alan Mackenzie <acm@muc.de> + + * cc-mode.texi ("Other Commands"): Move c-set-style (C-c .) here from + "Choosing a Style". + + * cc-mode.texi ("Styles"): Add @dfn{style}. + +2007-01-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * xresources.texi (Table of Resources): Add scrollBarWidth resource. + +2007-01-01 Richard Stallman <rms@gnu.org> + + * commands.texi (User Input): Document keys stolen by window mangers. + +2006-12-31 Richard Stallman <rms@gnu.org> + + * custom.texi (Specific Customization): Document customize-option + instead of customize-variable. + +2006-12-31 Kim F. Storm <storm@cua.dk> + + * major.texi (Choosing Modes): Document auto-mode-case-fold. + +2006-12-30 Kim F. Storm <storm@cua.dk> + + * killing.texi (CUA Bindings): Fix typo. + + * xresources.texi (Table of Resources): Mention grow-only value for + auto-resize-tool-bars. + +2006-12-30 Michael Albinus <michael.albinus@gmx.de> + + Sync with Tramp 2.0.55. + + * trampver.texi: Update release number. + +2006-12-29 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Customizing Articles): Add index entries for all + gnus-treat-* variables. + +2006-12-29 Jouni K. Sepp,Ad(Bnen <jks@iki.fi> + + * gnus.texi (IMAP): Fix incorrect explanation of + nnimap-search-uids-not-since-is-evil in documentation for + nnimap-expunge-search-string. + +2006-12-27 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (ifile spam filtering): Rename spam-ifile-database-path to + spam-ifile-database. + +2006-12-26 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Spam Package Configuration Examples): Don't encourage to + rebind C-s. + +2006-12-26 Jouni K. Sepp,Ad(Bnen <jks@iki.fi> + + * gnus.texi (Group Parameters, Group Maintenance, Topic Commands) + (Mail Group Commands, Expiring Mail, IMAP): Add index entries for + "expiring mail". + (IMAP): Document nnimap-search-uids-not-since-is-evil and + nnimap-nov-is-evil. + +2006-12-27 Eli Zaretskii <eliz@gnu.org> + + * msdog.texi (Windows Keyboard): Mention widespread Windows bindings, + and how to get them back. + +2006-12-26 Richard Stallman <rms@gnu.org> + + * calendar.texi (Holidays): Holiday listing is based on current + practice, but DST is not. + +2006-12-25 Richard Stallman <rms@gnu.org> + + * emacs.texi (Top): Update subnode menus. + + * mark.texi (Transient Mark): Fix xref. + + * killing.texi (Graphical Kill): Node deleted. + (Killing): Add xref to Cut and Paste. + (CUA Bindings): Update xref. + + * frames.texi (Cut and Paste): New section to hold other nodes. + (Mouse Commands): Node demoted. + (Cut/Paste Other App): Split out from Mouse Commands. + (Word and Line Mouse): Likewise. + (Secondary Selection, Clipboard): Nodes demoted. + +2006-12-25 Kevin Ryde <user42@zip.com.au> + + * cl.texi (Sorting Sequences): In sort*, add a little cautionary note + about the key procedure being used heavily. + +2006-12-24 Chong Yidong <cyd@stupidchicken.com> + + * pgg.texi (Caching passphrase): Default for pgg-gpg-use-agent changed + to t. + (Prerequisites): Add explanation about gpg-agent. + +2006-12-24 Kevin Ryde <user42@zip.com.au> + + * calendar.texi (Holidays): US daylight saving begins second Sunday + in March for 2007 onwards. + (Daylight Savings): Show new US default daylight saving rules, 2nd + Sun in Mar to 1st Sun in Nov, now in cal-dst.el. + +2006-12-23 Chong Yidong <cyd@stupidchicken.com> + + * calendar.texi (Scroll Calendar): < and > are switched. + +2006-12-23 Kevin Rodgers <ihs_4664@yahoo.com> + + * killing.texi (Deletion): Describe M-\ prefix argument. + +2006-12-23 Richard Stallman <rms@gnu.org> + + * search.texi (Regexp Search): Explain why forward and reverse regexp + search are not mirror images. + +2006-12-22 Kevin Ryde <user42@zip.com.au> + + * cl.texi (Sorting Sequences): Typo in sort*, example showed plain + "sort" instead of "sort*". + +2006-12-19 Richard Stallman <rms@gnu.org> + + * calc.texi (History and Acknowledgements): Recognize that Emacs + now does have floating point. + +2006-12-19 Kim F. Storm <storm@cua.dk> + + * major.texi (Choosing Modes): Describe match-function elements for + magic-mode-alist. + +2006-12-19 Michael Albinus <michael.albinus@gmx.de> + + * tramp.texi (External transfer methods): Describe new method `scpc'. + +2006-12-18 Eli Zaretskii <eliz@gnu.org> + + * msdog.texi (Windows Keyboard): Add a footnote about "Windows" keys + peculiarities. + +2006-12-18 Richard Stallman <rms@gnu.org> + + * abbrevs.texi (Editing Abbrevs): Fix previous change. + +2006-12-17 Sascha Wilde <wilde@sha-bang.de> + + * pgg.texi: Added short note on gpg-agent to the introduction. + +2006-12-17 Alan Mackenzie <acm@muc.de> + + * programs.texi (Left Margin Paren): Remove the bit which says + that CC Mode sets open-paren-in-column-0-is-defun-start to nil. + Discuss some of the issues of setting this option to nil. + +2006-12-17 Glenn Morris <rgm@gnu.org> + + * abbrevs.texi (Editing Abbrevs): Mention system abbrevs. + +2006-12-16 Eli Zaretskii <eliz@gnu.org> + + * msdog.texi (Windows Keyboard): Clarify `w32-recognize-altgr' effect. + (Windows Files): `w32-get-true-file-attributes' is only relevant for + NTFS volumes. + (ls in Lisp): `links' in `ls-lisp-verbosity' is only relevant to NTFS + volumes. + +2006-12-15 Eli Zaretskii <eliz@gnu.org> + + * text.texi (HTML Mode): Fix "C-c TAB". + +2006-12-13 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Hiding Headers): Document that `long-to' and `many-to' + also applies to Cc. + +2006-12-12 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (X-Face): Clarify. Say which programs are required + on Windows. + +2006-12-09 Richard Stallman <rms@gnu.org> + + * misc.texi (Invoking emacsclient): Simplify TCP file text. + +2006-12-08 Kevin Rodgers <ihs_4664@yahoo.com> + + * files.texi (Misc File Ops): Document insert-file-literally. + +2006-12-08 Eli Zaretskii <eliz@gnu.org> + + * cmdargs.texi (Colors): Note that --color is intended for overriding + the terminal defaults, not for normal invocation. + + * misc.texi (Emacs Server): Improve wording. Don't mention the + ``server program''. Add a cross-reference to "Init File" node. + (Invoking emacsclient): Add index entries. Document both short and + long versions of command-line options. Document the -f option. + +2006-12-08 Michael Olson <mwolson@gnu.org> + + * erc.texi (Modules): Remove documentation for list module. + +2006-12-06 Richard Stallman <rms@gnu.org> + + * text.texi (Outline Format): Say to set outline-regexp + and outline-level with major modes and file local variables. + +2006-12-05 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org> + + * anti.texi (Antinews): Mention the alternative to + `~/.emacs_SHELLNAME', which is `~/.emacs.d/init_SHELLNAME.sh'. + + * faq.texi (^M in the shell buffer): Ditto. + + * misc.texi (Interactive Shell): Ditto. + +2006-12-04 Eli Zaretskii <eliz@gnu.org> + + * emacs.texi (Acknowledgments): Fix Arne J@o{}rgensen's name. + + * ack.texi (Acknowledgments): Fix Arne J@o{}rgensen's name. + +2006-12-01 Eli Zaretskii <eliz@gnu.org> + + * mule.texi (Enabling Multibyte): Rephrase the confusing reference to a + colon in the mode line. + + * msdog.texi (Windows Processes) [@ifnottex]: Mention w32-shell-execute. + +2006-11-26 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Watch Expressions): Mention SPC for expanding/ + contracting watch expressions. + +2006-11-26 Kim F. Storm <storm@cua.dk> + + * kmacro.texi (Basic Keyboard Macro): Mention F3/F4 more. + +2006-11-26 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Debugger Operation): Define text command mode. + Clarify how tooltips work. + (GDB Graphical Interface): Explain how to run in text command mode + more clearly. + +2006-11-25 Juanma Barranquero <lekktu@gmail.com> + + * mule.texi (Defining Fontsets): Fix use of `charset' and `font'. + +2006-11-22 Juanma Barranquero <lekktu@gmail.com> + + * anti.texi (Antinews): Mention --server-file and TCP sockets. + +2006-11-20 Michael Olson <mwolson@gnu.org> + + * erc.texi: Call this the 5.2 stable pre-release of ERC. + +2006-11-18 Chong Yidong <cyd@stupidchicken.com> + + * misc.texi (Interactive Shell): INSIDE_EMACS is set to t, + and EMACS is deprecated. + +2006-11-18 Juanma Barranquero <lekktu@gmail.com> + + * makefile.w32-in (emacs.dvi): Remove xresmini.texi. + +2006-11-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * Makefile.in (emacs.dvi): Remove xresmini.texi. + + * emacs.texi: Include xresources.texi both for info and dvi. + + * xresources.texi: Merge text from xresmini.texi. + +2006-11-17 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Fix typos. + (Agenda commands): Document `C-k'. + +2006-11-16 Eli Zaretskii <eliz@gnu.org> + + * url.texi (http/https): Fix a typo in the HTTP URL. + +2006-11-14 Stephen Leake <stephen_leake@stephe-leake.org> + + * ada-mode.texi: Total rewrite. + +2006-11-13 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Minor typo fixes. + +2006-11-13 Bill Wohler <wohler@newt.com> + + Release MH-E manual version 8.0.3. + + * mh-e.texi (VERSION, EDITION, UPDATED, UPDATE-MONTH): Update for + release 8.0.3. + + * mh-e.texi (Incorporating Mail): Use output of "mhparam Path" + to set MAILDIR. + (Reading Mail): Document the customization of read-mail-command + for MH-E. + (Viewing Attachments): Document mm-discouraged-alternatives. + (Tool Bar): Fix Texinfo for mh-xemacs-use-tool-bar-flag. + (Junk): Add more information about the settings of mh-junk-background + in a program. Add /usr/bin/mh to PATH in examples. + +2006-11-12 Richard Stallman <rms@gnu.org> + + * woman.texi: Update author address but say he no longer maintains it. + +2006-11-12 Roberto Rodr,Am(Bguez <lanubeblanca@googlemail.com> (tiny change) + + * glossary.texi: Fix typos. + +2006-11-10 Carsten Dominik <carsten.dominik@gmail.com> + + * org.texi (ARCHIVE tag): Document C-TAB for forcing cycling of + archived trees. + (Checkboxes): Section moved to chapter 5, and extended. + (The date/time prompt): New section. + (Link abbreviations): New section. + (Presentation and sorting): New section. + (Custom agenda views): Section completely rewritten. + (Summary): Compare with Planner. + (Feedback): More info about creating backtraces. + (Plain lists): Modified example. + (Breaking down tasks): New section. + (Custom time format): New section. + (Time stamps): Document inactive timestamps. + (Setting tags): More details about fast tag selection. + (Block agenda): New section. + (Custom agenda views): Section rewritten. + (Block agenda): New section. + +2006-11-07 Michael Albinus <michael.albinus@gmx.de> + + * tramp.texi (Configuration): scp is the default method. + (Default Method): Use ssh as example for another method. + +2006-11-06 Richard Stallman <rms@gnu.org> + + * emacs.texi (Acknowledgments): Fix name spelling, add Anna Bigatti. + + * ack.texi (Acknowledgments): Fix name spelling. + +2006-11-01 Juri Linkov <juri@jurta.org> + + * search.texi (Word Search): Document incremental word search. + +2006-10-28 Glenn Morris <rgm@gnu.org> + + * ack.texi (Acknowledgments): Add cal-html author. + + * calendar.texi (Writing Calendar Files): Rename section (was "LaTeX + Calendar"). Describe new package cal-html. + * emacs.texi (Top): Rename old node "LaTeX Calendar" to "Writing + Calendar Files." + +2006-10-27 Richard Stallman <rms@gnu.org> + + * woman.texi: Downcase nroff/troff/roff. + (Installation): Chapter deleted. Some xrefs deleted. + (Background): woman doesn't advise man ;-). + +2006-10-26 Roberto Rodr,Am(Bguez <lanubeblanca@googlemail.com> (tiny change) + + * ada-mode.texi (Project files, Identifier completion) + (Automatic Casing, Debugging, Using non-standard file names) + (Working Remotely): Fix typos. + +2006-10-23 Richard Stallman <rms@gnu.org> + + * abbrevs.texi (Expanding Abbrevs): Expansion happens only when + Abbrev mode is enabled. + +2006-10-20 Masatake YAMATO <jet@gyve.org> + + * cc-mode.texi (Sample .emacs File): Added missing `)' in + sample code `my-c-initialization-hook'. + +2006-10-19 Stuart D. Herring <herring@lanl.gov> + + * widget.texi: Fix typos. + +2006-10-19 Michael Albinus <michael.albinus@gmx.de> + + * tramp.texi (Frequently Asked Questions): Remove questions marked with + "???". There have been no complaints for years, so the information + must be appropriate. + +2006-10-16 Richard Stallman <rms@gnu.org> + + * widget.texi: Use @var instead of capitalization. + Clarify many widget type descriptions. + + * emacs.texi: Update ISBN. + +2006-10-13 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de> + + * gnus.texi (Other modes): Fix typo. Add alternative index entry for + gnus-dired-attach. + (Selecting a Group): Fix typo. + +2006-10-12 Roberto Rodr,Am(Bguez <lanubeblanca@googlemail.com> (tiny change) + + * widget.texi: Fix typos. + +2006-10-11 Kim F. Storm <storm@cua.dk> + + * emacs.texi (Acknowledgments): Use @dotless{i}. + +2006-10-08 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Breakpoints Buffer): Mention catchpoints. + +2006-10-08 Kim F. Storm <storm@cua.dk> + + * ack.texi (Acknowledgments): Update. + + * emacs.texi (Acknowledgments): Fix bad @/ form. + +2006-10-06 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Image Enhancements): Update for Emacs 22. + + * gnus-faq.texi ([1.3]): Update. + +2006-10-06 Richard Stallman <rms@gnu.org> + + * faq.texi (Displaying the current line or column): + Delete "As of Emacs 20". + +2006-10-06 Romain Francoise <romain@orebokech.com> + + * faq.texi (VM): VM works with Emacs 22 too. + +2006-10-06 Richard Stallman <rms@gnu.org> + + * ebrowse.texi: Remove Emacs version "21" from title. + +2006-10-05 Kim F. Storm <storm@cua.dk> + + * emacs.texi (Acknowledgments): Add more contributors. + +2006-10-03 Richard Stallman <rms@gnu.org> + + * emacs.texi (Acknowledgments): Update version and edition. + +2006-10-02 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Foreign Groups): Say where change of editing commands are + stored. Add reference to `gnus-parameters'. + +2006-10-01 Karl Berry <karl@gnu.org> + + * custom.texi (Customization Groups): Page break to keep example buffer + on one page. + +2006-09-30 Karl Berry <karl@gnu.org> + + * programs.texi (Basic Indent): @need to improve page break. + * text.texi: Rewording to improve page breaks, and use @LaTeX{}. + +2006-09-29 Glenn Morris <rgm@gnu.org> + + * calendar.texi (Date Formats): Doc fix for european-calendar-style. + +2006-09-29 Karl Berry <karl@gnu.org> + + * windows.texi (Basic Window): Remove forced @break, no longer + desirable. + * frames.texi (Frame Commands), + * mark.texi (Marking Objects): Reword to avoid bad page break. + * display.texi (Auto Scrolling): Use @tie{} to avoid bad line break. + +2006-09-19 Richard Stallman <rms@gnu.org> + + * frames.texi (Dialog Boxes): Clean up wording: avoid passive, + stick to present tense. + +2006-09-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * frames.texi (Dialog Boxes): Rename x-use-old-gtk-file-dialog + to x-gtk-use-old-file-dialog. + (Dialog Boxes): Document x-gtk-file-dialog-help-text. + +2006-09-15 Jay Belanger <belanger@truman.edu> + + * calc.texi, emacs.texi, mh-e.texi (GNU GENERAL PUBLIC LICENSE): + Change "Library Public License" to "Lesser Public License" + throughout. Use "yyyy" to represent year. + +2006-09-15 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Setting tags): Typo fix. + +2006-09-14 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Oort Gnus): Add @xref for `mm-fill-flowed'. + +2006-09-12 Reiner Steib <Reiner.Steib@gmx.de> + + * files.texi (Visiting): Add index entry "open file". + + * reftex.texi (Citations Outside LaTeX): Simplify lisp example. + +2006-09-12 Paul Eggert <eggert@cs.ucla.edu> + + * faq.texi (Escape sequences in shell output): EMACS is now set + to Emacs's absolute file name, not to "t". + (^M in the shell buffer): Likewise. + * misc.texi (Interactive Shell): Likewise. + +2006-09-11 Richard Stallman <rms@gnu.org> + + * building.texi (Compilation Mode): Clarification. + (Grep Searching): Add xref to Compilation Mode. + +2006-09-11 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Mail Source Specifiers): Mention problem of duplicate + mails with pop3-leave-mail-on-server. Fix wording. + (Limiting): Improve gnus-summary-limit-to-articles. + (X-Face): Fix typo. + +2006-09-11 Simon Josefsson <jas@extundo.com> + + * smtpmail.texi (Authentication): Explain TLS and SSL better, based on + suggested by Phillip Lord <phillip.lord@newcastle.ac.uk>. + +2006-09-08 Richard Stallman <rms@gnu.org> + + * search.texi (Search): Ref multi-file search commands here. + (Other Repeating Search): Not here. + +2006-09-06 Simon Josefsson <jas@extundo.com> + + * smtpmail.texi (Authentication): Mention SSL. + +2006-09-01 Eli Zaretskii <eliz@gnu.org> + + * rcirc.texi (Internet Relay Chat, Useful IRC commands): + Don't use @indicateurl. + + * cc-mode.texi (Subword Movement): Don't use @headitem. + (Custom Braces, Clean-ups): Don't use @tie. + +2006-08-29 Michael Albinus <michael.albinus@gmx.de> + + Sync with Tramp 2.0.54. + + * tramp.texi (Bug Reports): The Tramp mailing list is moderated now. + Suggested by Adrian Phillips <a.phillips@met.no>. + +2006-08-28 Richard Stallman <rms@gnu.org> + + * windows.texi (Split Window): Update xref. + + * basic.texi (Continuation Lines): Update xref. + + * indent.texi (Tab Stops): Update xref. + + * emacs.texi (Top): Update subnode menu. + + * display.texi (Line Truncation, Displaying Boundaries): New nodes, + split out of Display Custom. + +2006-08-25 Kim F. Storm <storm@cua.dk> + + * display.texi (Display Custom): Add variables overline-margin + and x-underline-at-descent-line. + +2006-08-25 Richard Stallman <rms@gnu.org> + + * entering.texi (Exiting): Rewrite to give graphical displays + priority over text terminals. + + * search.texi (Incremental Search): Move index entries. + +2006-08-23 Chong Yidong <cyd@stupidchicken.com> + + * custom.texi (Init File): Reference Find Init to avoid "home + directory" confusion. + +2006-08-22 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Other GDB-UI Buffers): Describe how to edit + a value in the locals buffer. + +2006-08-21 Richard Stallman <rms@gnu.org> + + * search.texi (Basic Isearch): Add `isearch' index entry. + +2006-08-16 Richard Stallman <rms@gnu.org> + + * misc.texi (Saving Emacs Sessions): Clean up wording. + + * mark.texi (Marking Objects): Mention term "select all". + + * emacs.texi (Top): Update subnode menu. + + * help.texi (Help Mode): Move node up in file. + +2006-08-15 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Installation, Activation): Split from Installation and + Activation. + (Clocking work time): Documented new features. + +2006-08-15 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Stack Buffer): Explain fringe arrow. + +2006-08-13 Alex Schroeder <alex@gnu.org> + + * rcirc.texi (Configuration): Use correct variable in rcirc-authinfo + example. + +2006-08-12 Eli Zaretskii <eliz@gnu.org> + + * faq.texi (How to add fonts): New node. + + * misc.texi (Saving Emacs Sessions): Clarify when desktop is restored + on startup. + +2006-08-11 Romain Francoise <romain@orebokech.com> + + * ack.texi (Acknowledgments): Delete mention to zone-mode.el. + +2006-08-10 Sven Joachim <svenjoac@gmx.de> (tiny change) + + * mule.texi (Recognize Coding, Text Coding): Fix typos. + +2006-08-10 Richard Stallman <rms@gnu.org> + + * text.texi (Format Faces): Substantial rewrites to deal + with face merging. Empty regions don't count. Clarify + face property inheritance. + +2006-08-08 Romain Francoise <romain@orebokech.com> + + * dired.texi (Marks vs Flags): Fix typo reported by Ari Roponen + <arjuropo@cc.jyu.fi>. + +2006-08-05 Romain Francoise <romain@orebokech.com> + + * faq.texi (New in Emacs 22): Expand. + +2006-08-04 Eli Zaretskii <eliz@gnu.org> + + * cmdargs.texi (Window Size X) <--geometry>: Only width and height + apply to all frames. + +2006-08-03 Michael Olson <mwolson@gnu.org> + + * erc.texi: Update for ERC 5.1.4. + +2006-08-01 Richard Stallman <rms@gnu.org> + + * help.texi (Name Help): Add index entries for describe-variable. + +2006-08-01 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (GDB Graphical Interface): Shorten node names. + (GDB-UI Layout): Use GDB-related. + (Other GDB-UI Buffers): Simplify English. + +2006-07-31 Richard Stallman <rms@gnu.org> + + * search.texi (Query Replace): Add xref for Dired's Q command. + +2006-07-28 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Oort Gnus): Mention that the Lisp files are now installed + in .../site-lisp/gnus/ by default. + [ From gnus-news.texi in the trunk. ] + +2006-07-27 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (MIME Commands): Additions for yEnc. + +2006-07-31 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (GDB commands in Fringe): Rename to... + (Source Buffers): ..this and move forward. Describe hollow arrow and + new option gdb-find-source-frame. + +2006-07-29 Richard Stallman <rms@gnu.org> + + * dired.texi (Operating on Files): Simplify previous change + and fix Texinfo usage. + +2006-07-29 Eli Zaretskii <eliz@gnu.org> + + * dired.texi (Operating on Files): Add cross-references. State the + Unix commands that do similar things. + +2006-07-28 Richard Stallman <rms@gnu.org> + + * mark.texi (Transient Mark): Clarify that region never disappears + when Transient Mark mode is off, and not when it is on. + +2006-07-27 Richard Stallman <rms@gnu.org> + + * search.texi (Non-ASCII Isearch): Clarify. Mention C-q. + +2006-07-24 Richard Stallman <rms@gnu.org> + + * xresources.texi (GTK styles): Fix texinfo usage. + + * pgg.texi, org.texi, info.texi, forms.texi, flymake.texi: + * faq.texi: Move periods and commas inside quotes. + + * commands.texi (User Input): Explain why we teach keyboard cmds. + + * xresources.texi, xresmini.texi, search.texi, programs.texi: + * misc.texi, kmacro.texi, killing.texi, glossary.texi: + * fortran-xtra.texi, files.texi, emacs.texi, emacs-xtra.texi: + * doclicense.texi, display.texi, dired.texi, basic.texi: + * anti.texi, ack.texi: Move periods and commas inside quotes. + +2006-07-22 Eli Zaretskii <eliz@gnu.org> + + * cmdargs.texi (General Variables): Document EMAIL. + +2006-07-21 Eli Zaretskii <eliz@gnu.org> + + * frames.texi (Frame Commands): Mention that focus-follows-mouse + doesn't have effect on MS-Windows. + +2006-07-20 Jay Belanger <belanger@truman.edu> + + * calc.texi (Error forms): Mention M-+ keybinding for `calc-plus-minus'. + +2006-07-18 Chong Yidong <cyd@stupidchicken.com> + + * faq.texi (Security risks with Emacs): Document Emacs 22 + file-local-variable mechanism. + +2006-07-17 Richard Stallman <rms@gnu.org> + + * building.texi (Grep Searching): Explain about chaining grep commands. + +2006-07-12 Michael Olson <mwolson@gnu.org> + + * erc.texi: Update for ERC 5.1.3. + +2006-07-12 Alex Schroeder <alex@gnu.org> + + * rcirc.texi: Fix typos. + (Getting started with rcirc): New calling convention for M-x irc. + Mention #rcirc. Removed channel tracking. + (Configuration): Changed the names of all variables that got changed + recently, eg. rcirc-server to rcirc-default-server. Added + documentation for rcirc-authinfo, some background for Bitlbee, and + rcirc-track-minor-mode. + (Scrolling conservatively): Fixed the xref from Auto Scrolling to just + Scrolling. + (Reconnecting after you have lost the connection): Fixed example code + to match code changes. + +2006-07-10 Nick Roberts <nickrob@snap.net.nz> + + * killing.texi, gnus.texi, message.texi, mini.texi: Fix typos. + +2006-07-09 Chong Yidong <cyd@stupidchicken.com> + + * misc.texi (Invoking emacsclient): Document behavior when emacsclient + is invoked for multiple files. + +2006-07-08 Eli Zaretskii <eliz@gnu.org> + + * msdog.texi (Windows Keyboard) [@iftex]: Add an @inforef to the + on-line manual for the rest of this node. + (Windows Mouse) <w32-pass-extra-mouse-buttons-to-system>: Include + unconditionally. + (Windows Processes) <w32-quote-process-args>: Include unconditionally. + Improve wording. + (Windows Printing): Improve wording. + (Windows Misc) [@iftex]: Add an @inforef to the on-line manual for the + rest of this node. + +2006-07-07 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Exporting): Document `C-c C-e' as the prefix for exporting + commands. + (Global TODO list): Document the use of the variables + `org-agenda-todo-ignore-scheduled' and + `org-agenda-todo-list-sublevels'. + +2006-07-05 Richard Stallman <rms@gnu.org> + + * faq.texi (Scrolling only one line): Fix xref. + +2006-07-05 Thien-Thi Nguyen <ttn@gnu.org> + + * building.texi (Lisp Eval): + * faq.texi (Evaluating Emacs Lisp code): + Throughout, replace eval-current-buffer with eval-buffer. + +2006-07-05 Nick Roberts <nickrob@snap.net.nz> + + * mule.texi (Coding Systems, Specify Coding): Link descriptions + of character translation. + +2006-07-04 Nick Roberts <nickrob@snap.net.nz> + + * rmail.texi (Remote Mailboxes): Add missing @code keyword. + +2006-07-03 Karl Berry <karl@gnu.org> + + * emacs.texi (\hbadness): Set to 6000 so we aren't bothered by + not-too-underfull hboxes in the TeX output. + * abbrevs.texi, buffers.texi, building.texi, calendar.texi, + * cmdargs.texi, custom.texi, dired.texi, macos.texi, + * maintaining.texi, misc.texi, mule.texi, programs.texi, rmail.texi, + * sending.texi, text.texi: Fix overfull/underfull boxes. + +2006-07-03 Romain Francoise <romain@orebokech.com> + + * m-x.texi (M-x): Fix. + +2006-07-03 Richard Stallman <rms@gnu.org> + + * rcirc.texi (Scrolling conservatively): Fix xref. + + * pcl-cvs.texi (Viewing differences): Usage fix. + + * search.texi (Other Repeating Search): filename -> file name. + + * misc.texi (Narrowing): Minor cleanups. + + * files.texi (Visiting): filename -> file name. + + * emacs.texi (Top): Update subnode menus. + + * mule.texi (Coding Systems): Move char translation stuff here. + (Specify Coding, Output Coding): New nodes, out of Recognize Coding. + (Recognize Coding): Substantial local rewrites. + (International): Update menu. + + * display.texi (Auto Scrolling): New node, broken out of Scrolling. + (Scrolling): Substantial local rewrites. + (Display): Update menu and intro. + + * dired.texi: filename -> file name. + + * custom.texi (Safe File Variables): Texinfo usage fix. + +2006-07-03 Ted Zlatanov <tzz@lifelogs.com> + + * help.texi, m-x.texi: Lots of cleanups. + +2006-07-03 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Agenda commands): Document `s' key to save all org-mode + buffers. + +2006-06-30 Eli Zaretskii <eliz@gnu.org> + + * msdog.texi (ls in Lisp, Windows Keyboard, Windows Mouse) + (Windows Processes, Windows Misc): Shorten the printed version by + selectively conditioning less important portions by @ifnottex. + +2006-06-30 Ralf Angeli <angeli@caeruleus.net> + + * pcl-cvs.texi (Customizing Faces): Remove -face suffix from face + names. Mention `cvs-msg' face. + +2006-06-29 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Checkboxes): New section. + +2006-06-28 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Embedded LaTeX): Fix typos and implement small improvements + throughout this chapter. + +2006-06-27 Chong Yidong <cyd@stupidchicken.com> + + * info.texi (Help-Small-Screen): Clarify placement of "All" and "Top" + text for standalone vs Emacs info. + (Help): Clarify header line description. Use mouse-1 for clicks. + (Help-P): Use mouse-1 for clicks. + (Help-^L): "Top" and "All" not displayed with dashes in Emacs. + (Help-^L, Help-M, Help-Int, Search Index, Go to node) + (Choose menu subtopic): Remove gratuitous Emacs command names. + (Help-FOO): Put usual behavior first. + (Help-Xref): Clicking on xrefs works in Emacs. + (Search Text): Clarify what the default behavior is. + (Create Info buffer): Fix Emacs window/X window confusion. + (Emacs Info Variables): Fix for new Emacs init file behavior. + +2006-06-27 Richard Stallman <rms@gnu.org> + + * mini.texi (Minibuffer File): Minor cleanup. + +2006-06-25 Nick Roberts <nickrob@snap.net.nz> + + * frames.texi (XTerm Mouse): Rename to... + (Text-Only Mouse): ...this. Mention t-mouse-mode. + + * emacs.texi (Top): Use new node name. + +2006-06-24 Eli Zaretskii <eliz@gnu.org> + + * emacs.texi (Top): Update the detailed menu according to changes in + msdog.texi. + + * msdog.texi (Windows Keyboard): New section. + (Windows Mouse): New section. + (Windows System Menu): Remove section (text merged with "Windows + Keyboard"). + (Windows Misc): New section. + + * dired.texi (Dired Enter): Refer to msdog.texi for ls-lisp emulation. + + * msdog.texi (ls in Lisp): New section. + + * files.texi (Visiting): Document case-insensitive wildcard matching + under find-file-wildcards. + +2006-06-24 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de> + + * gnus.texi (Summary Buffer Lines): Fix typo. + +2006-06-23 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Embedded LaTeX): New chapter. + (Archiving): Section rewritten. + (Enhancing text): Some parts moved to the new chapter about LaTeX. + +2006-06-20 Bill Wohler <wohler@newt.com> + + Release MH-E manual version 8.0.1. + + * mh-e.texi (VERSION, EDITION, UPDATED, UPDATE-MONTH): Update for + release 8.0.1. + (Preface): Depend on GNU mailutils 1.0 and higher. + +2006-06-19 Katsumi Yamaoka <yamaoka@jpl.org> + + * message.texi (News Headers): Update message-syntax-checks section. + +2006-06-19 Karl Berry <karl@gnu.org> + + * info.texi (Advanced): Mention C-q, especially with ?. + +2006-06-19 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Publishing links): Document the `:link-validation-function' + property. + (Extensions and Hacking): New chapter, includes some sections of the + "Miscellaneous" chapter. + +2006-06-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * macos.texi (Mac Input): Add description of mac-function-modifier. + Now Unicode keyboard layouts work. + +2006-06-10 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Progress logging): New section. + +2006-06-10 Richard Stallman <rms@gnu.org> + + * mule.texi (Recognize Coding): Clarify previous change. + +2006-06-09 Kenichi Handa <handa@m17n.org> + + * mule.texi (Recognize Coding): Describe the convention of "CODING!" + notation. + +2006-06-07 Kevin Ryde <user42@zip.com.au> + + * mule.texi (Coding Systems): Footnote xref "MS-DOS and MULE" in main + manual for @ifnottex, but in emacs-extra for @iftex. + + * cmdargs.texi (General Variables): Fix smtpmail xref. + +2006-05-29 Stefan Monnier <monnier@iro.umontreal.ca> + + * viper.texi (Viper Specials): + * programs.texi (Comment Commands): + * gnus.texi (Example Setup): + * faq.texi (Backspace invokes help): + * dired-x.texi (Optional Installation Dired Jump): + * custom.texi (Specifying File Variables): + * calc.texi (Defining Simple Commands): Use ;; instead of ;;; to better + follow coding conventions. + +2006-05-18 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Saving Articles): Clarify gnus-summary-save-article-mail. + +2006-06-07 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Watch Expressions): Move node to end. + (GDB Graphical Interface): Move description of clicks in fringe... + (GDB commands in the Fringe): ...to here. New node. + +2006-06-06 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (ASCII export): Document indentation adaptation. + (Setting tags): Document mutually-exclusive tags. + +2006-06-05 Romain Francoise <romain@orebokech.com> + + * url.texi (irc): Mention new funs `url-irc-rcirc' and `url-irc-erc'. + Fix typo. + + * gnus-faq.texi (Question 8.6): Update reference to the Gnus + channel (#gnus@irc.freenode.net). + Fix typos. Update copyright notice. + + * cc-mode.texi (Getting Started, Indentation Commands, Config Basics) + (Custom Filling and Breaking, Custom Braces, Syntactic Symbols) + (Line-Up Functions, Custom Macros): + * ediff.texi (Window and Frame Configuration) + (Highlighting Difference Regions, Highlighting Difference Regions): + * emacs-mime.texi (Display Customization): + * erc.texi (History): + * eshell.texi (Known problems): + * eudc.texi (Overview, BBDB): + * gnus.texi (NNTP, IMAP, Advanced Scoring Examples) + (The problem of spam, SpamOracle, Extending the Spam package) + (Conformity, Terminology): + * idlwave.texi (Routine Info, Routine Info) + (Class and Keyword Inheritance, Padding Operators) + (Breakpoints and Stepping, Electric Debug Mode) + (Examining Variables, Troubleshooting): + * org.texi (Creating timestamps): + * reftex.texi (Commands, Options, Changes): + * tramp.texi (Inline methods, Password caching) + (Auto-save and Backup, Issues): + * vip.texi (Files, Commands in Insert Mode): + * viper.texi (Emacs Preliminaries, States in Viper) + (Packages that Change Keymaps, Viper Specials, Groundwork): + * xresmini.texi (GTK resources): + Fix various typos. + +2006-06-05 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (GDB Graphical Interface): Update bindings. + (Commands of GUD): Add gud-print. Remove gud-run. + Restate availability more generally. + +2006-06-03 Ted Zlatanov <tzz@lifelogs.com> + + * mini.texi: Lots of cleanups. + +2006-06-01 Luc Teirlinck <teirllm@auburn.edu> + + * misc.texi (Shell History Copying): Update descriptions of `C-c RET' + and Mouse-2. + +2006-06-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * screen.texi (Menu Bar): Change menu-bar-start to menu-bar-open. + +2006-05-31 Michael Ernst <mernst@alum.mit.edu> + + * ediff.texi: Fix typos. + +2006-05-31 Richard Stallman <rms@gnu.org> + + * basic.texi (Moving Point): Fix previous change. + +2006-05-30 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Small typo fixes. + +2006-05-29 Michael Albinus <michael.albinus@gmx.de> + + * tramp.texi (Frequently Asked Questions): Disable zsh zle. + +2006-05-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * screen.texi (Menu Bar): F10 for Gtk+/Lesstif/Lucid menus. + +2006-05-28 Ted Zlatanov <tzz@lifelogs.com> + + * basic.texi: Many simplifications and improvements in wording. + +2006-05-27 Thien-Thi Nguyen <ttn@gnu.org> + + * pcl-cvs.texi: Fix typos. + (Customization): Say "us". + +2006-05-26 Eli Zaretskii <eliz@gnu.org> + + * org.texi: Remove bogus @setfilename. + +2006-05-26 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (ASCII export): Omit command name. + (HTML export): Add prefix to all lines in Local Variable example. + (Acknowledgments): Typeset names in italics. + +2006-05-26 Nick Roberts <nickrob@snap.net.nz> + + * anti.texi (Antinews): Create a node for gdb-ui. + +2006-05-24 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Plain lists): Add new item navigation commands. + (External links): Document elisp and info links. + (Custom searches): New section. + (Publishing): New chapter. + (HTML export): Include a list of supported CSS classes. + (Setting tags): Describe the fast-tag-setting interface. + +2006-05-22 Reiner Steib <Reiner.Steib@gmx.de> + + * frames.texi (Menu Bars, Tool Bars): Add index entries. + +2006-05-20 Richard Stallman <rms@gnu.org> + + * dired.texi (Dired Navigation): dired-goto-file is now j. + +2006-05-20 Luc Teirlinck <teirllm@auburn.edu> + + * dired-x.texi: ifinfo -> ifnottex. + +2006-05-20 Eli Zaretskii <eliz@gnu.org> + + * mule.texi (Coding Systems): Mention the undecided-* coding systems + and their aliases. + + * msdog.texi (Windows Printing): Mention non-support of plain text + printing with some el-cheapo printers, and suggest a workaround. + +2006-05-20 Kevin Ryde <user42@zip.com.au> + + * text.texi (TeX Print): tex-dvi-view-command has a default value, + remove the bit saying you must set it. + +2006-05-19 Luc Teirlinck <teirllm@auburn.edu> + + * trouble.texi (Checklist): + * text.texi (Text, Auto Fill, Text Mode): + * search.texi (Nonincremental Search): + * rmail.texi (Rmail Labels): + * mule.texi (Input Methods, Multibyte Conversion): + * misc.texi (Gnus, Where to Look, PostScript): + * maintaining.texi (Create Tags Table): + * indent.texi (Indentation Commands): + * fixit.texi (Spelling): + * emacs.texi (Copying): + * custom.texi (Init File): ifinfo -> ifnottex. + +2006-05-18 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Saving Articles): Clarify gnus-summary-save-article-mail. + +2006-05-17 Richard Stallman <rms@gnu.org> + + * files.texi (Diff Mode): Mention C-x `. + +2006-05-08 Richard Stallman <rms@gnu.org> + + * custom.texi (Disabling): Textual cleanups. + +2006-05-12 Reiner Steib <Reiner.Steib@gmx.de> + + * message.texi (Interface): Add tool bar customization. + (MIME): Index and text additions for mml-attach. + (MIME): Describe mml-dnd-protocol-alist and + mml-dnd-attach-options. + + * gnus.texi (Oort Gnus): Reorder entries in sections. + Fix some entries. + (Starting Up): Add references to "Emacs for Heathens" and to + "Finding the News". Add user-full-name and user-mail-address. + (Group Buffer Format): Add tool bar customization and update. + (Summary Buffer): Add tool bar customization. + (Posting Styles): Add message-alternative-emails. + +2006-05-12 Glenn Morris <rgm@gnu.org> + + * calendar.texi (Displaying the Diary, Format of Diary File): + Refer to diary-view-entries, diary-list-entries, + diary-show-all-entries rather than obsolete aliases. + +2006-05-12 Eli Zaretskii <eliz@gnu.org> + + * calendar.texi (Calendar/Diary, Holidays, Displaying the Diary) + (Displaying the Diary, Special Diary Entries, Importing Diary): + * building.texi (Compilation Shell): + * buffers.texi (Several Buffers) [iftex]: Replace @xref's to + emacs-xtra with @inforef's. + + * files.texi (Visiting): Fix wording. + + * mule.texi (Coding Systems, Text Coding): More indexing. + Mention that C-x RET f can set eol conversion. + +2006-05-09 Michael Albinus <michael.albinus@gmx.de> + + * tramp.texi (Filename completion): Improve wording. + +2006-05-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * xresmini.texi (GTK resources): Insert GTK description. + + * xresources.texi (GTK resources): metafont should be menufont. + +2006-05-07 Romain Francoise <romain@orebokech.com> + + * faq.texi (Using regular expressions): Fix typo. + (Packages that do not come with Emacs): Fix capitalization. + (Replacing text across multiple files): Expand node to explain how + to use `dired-do-query-replace-regexp' in more detail, based on + suggestion by Eric Hanchrow <offby1@blarg.net>. + +2006-05-06 Michael Albinus <michael.albinus@gmx.de> + + * mini.texi (Completion Options): + * tramp.texi (Filename completion): Completion of remote files' + method, user name and host name is active only in partial + completion mode. + +2006-05-06 Bill Wohler <wohler@newt.com> + + Release MH-E manual version 8.0. + + * mh-e.texi (VERSION, EDITION, UPDATED, UPDATE-MONTH): Update for + release 8.0. + +2006-05-06 Bill Wohler <wohler@newt.com> + + * mh-e.texi (MH-BOOK-HOME): Change from + http://www.ics.uci.edu/~mh/book/mh to + http://rand-mh.sourceforge.net/book/mh. + Replace .htm suffix with .html for MH book files. + (Using This Manual): Update key binding for getting relevant + chapter in Info from command key. + (Ranges): Fix itemx. + +2006-05-06 Eli Zaretskii <eliz@gnu.org> + + * makefile.w32-in (emacs.dvi): + * Makefile.in (emacs.dvi): Add xresmini.texi. + + * xresmini.texi (Table of Resources): Remove xref to non-existent + node "LessTif Resources". + + * msdog.texi (Microsoft Windows): + * calendar.texi (Calendar/Diary, Displaying the Diary) + (Special Diary Entries, Importing Diary, Holidays): + * programs.texi (Program Modes): + * text.texi (Text): + * buffers.texi (Several Buffers): + * files.texi (Comparing Files): Fix cross-references to emacs-xtra. + +2006-05-06 Eli Zaretskii <eliz@gnu.org> + + The following changes merge the emacs-xtra manual into the main + manual, but only for on-line version of the manual. + + * vc2-xtra.texi (Version Backups, Local Version Control) + (Making Snapshots, Change Logs and VC, Version Headers) + (Customizing VC, CVS Options) [ifnottex]: Conditional xref's for + on-line manual. + + * vc1-xtra.texi (VC Dired Mode) [ifnottex]: Conditional xref's + for on-line manual. + + * msdog-xtra.texi (MS-DOS, MS-DOS Keyboard, MS-DOS Mouse) + (MS-DOS Display, MS-DOS File Names, MS-DOS Printing) + (MS-DOS and MULE, MS-DOS Processes) [ifnottex]: Conditional xref's + for on-line manual. + + * fortran-xtra.texi (Fortran, Fortran Autofill) + (Fortran Autofill, Fortran Abbrev) [ifnottex]: Conditional xref's + for on-line manual. + + * picture-xtra.texi (Basic Picture, Rectangles in Picture) [ifnottex]: + Conditional xref's for on-line manual. + + * emerge-xtra.texi (Emerge, Overview of Emerge) + (Fine Points of Emerge) [ifnottex]: Conditional xref's for on-line + manual. + + * Makefile.in (INFO_TARGETS): Remove ../info/emacs-xtra. + (EMACS_XTRA): New variable, lists the new *-xtra.texi files. + (EMACSSOURCES): Use EMACS_XTRA. + (../info/emacs-xtra): Remove. + (emacs-xtra.dvi): Add EMACS_XTRA to prerequisites. + + * makefile.w32-in (INFO_TARGETS): Remove $(infodir)/emacs-xtra. + (EMACS_XTRA): New variable, lists the new *-xtra.texi files. + (EMACSSOURCES): Use EMACS_XTRA. + ($(infodir)/emacs-xtra): Remove. + (emacs-xtra.dvi): Add EMACS_XTRA to prerequisites. + + * trouble.texi (Quitting): + * text.texi (Text): + * programs.texi (Program Modes): + * msdog.texi (Microsoft Windows): + * frames.texi (Frames): + * files.texi (Backup, Version Control, VC Concepts) + (Types of Log File, Advanced C-x v v, Log Buffer, Old Versions) + (Registering, VC Status, VC Undo, Multi-User Branching) + (Comparing Files): + * calendar.texi (Calendar/Diary, Holidays, Displaying the Diary) + (Displaying the Diary, Special Diary Entries, Importing Diary): + * buffers.texi (Several Buffers): Replace inforef to emacs-xtra by + conditional xref's, depending on @iftex/@ifnottex. + + * msdog.texi (Microsoft Windows) [ifnottex]: Add menu entry for + "MS-DOS". @include msdog-xtra.texi. + + * programs.texi (Programs) [ifnottex]: Add menu entry for "Fortran". + <Top Level> [ifnottex]: @include fortran-xtra.texi. + + * files.texi (Secondary VC Commands) [ifnottex]: Add menu entries + for vc-xtra.texi subsections. + (VC Undo) [ifnottex]: @include vc1-xtra.texi and @lowersections it. + (Multi-User Branching) [ifnottex]: @include vc2-xtra.texi. + + * sending.texi (Sending Mail): A @node line without explicit Prev, + Next, and Up links. + + * abbrevs.texi (Abbrevs): A @node line without explicit Prev, + Next, and Up links. + + * emacs.texi (Top) [ifnottex]: Add menu entries for "Picture Mode" + and its sections. @include picture-xtra.texi. + + * maintaining.texi (Maintaining) [ifnottex]: Add menu entry for + "Emerge". + (List Tags) [ifnottex]: @include emerge-xtra.texi. + + * cal-xtra.texi (Daylight Savings): Remove this node: it is an + exact duplicate of its name-sake in calendar.texi. + + * calendar.texi (Calendar/Diary) [ifnottex]: Add menu item for + "Advanced Calendar/Diary Usage". + (Time Intervals) [ifnottex]: @include cal-xtra.texi. + + * dired.texi (Subdirectories in Dired) [ifnottex]: @include + dired-xtra.texi. + (Dired) [ifnottex]: Add menu entry for "Subdir Switches". + + * files.texi (Reverting) [ifnottex]: @include arevert-xtra.texi. + (Files) [ifnottex]: Add menu entry for Autorevert. + + * emacs-xtra.texi (Introduction): Reword to make consistent with + printed version only. + <Top level>: Remove the body of all chapters and move them to the + new *-xtra.texi files. Use @raisesections and @lowersections to + convert sections to chapters etc. + + * msdog-xtra.texi: + * fortran-xtra.texi: + * vc-xtra.texi: + * vc1-xtra.texi: + * vc2-xtra.texi: + * emerge-xtra.texi: + * cal-xtra.texi: + * dired-xtra.texi: + * arevert-xtra.texi: New files, with text from respective chapters + of emacs-xtra.texi. Convert each @chapter into @section, @section + into @subsection, etc. + + * emacs-xtra.texi (MS-DOS): Renamed from "MS-DOG". All references + updated. + + * msdog.texi (Microsoft Windows): Rename from "Emacs and Microsoft + Windows". All references updated. + +2006-05-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * macos.texi (Mac Input): Mention input from Character Palette. + (Mac Font Specs): Fix typo. + +2006-05-05 Richard Stallman <rms@gnu.org> + + * files.texi (Diff Mode): Minor cleanup. + +2006-05-05 Karl Berry <karl@gnu.org> + + * texinfo.tex (\definetextfonsizexi, \definetextfonsizex): New cmds. + (\fonttextsize): New user-level command to change text font size. + * emacs.texi: Call @fonttextsize 10, inside @tex to avoid + errors from the current release of makeinfo (4.8). + * help.texi (Library Keywords): Change widest word in multitable + template from `emulations' to `convenience'. (Not sure if this is + related to the font change.) + +2006-05-05 Eli Zaretskii <eliz@gnu.org> + + * files.texi (File Names): Add a footnote about limited support of + ~USER on MS-Windows. + + * cmdargs.texi (Initial Options): Add a footnote about limited + support of ~USER on MS-Windows. + +2006-05-03 Richard Stallman <rms@gnu.org> + + * files.texi (Diff Mode): Node moved here. + (Comparing Files): Delete what duplicates new node. + (Files): Put Diff Mode in menu. + + * misc.texi (Diff Mode): Moved to files.texi. + + * emacs.texi (Top): Update menu for Diff Mode. + + * trouble.texi (Emergency Escape): Simplify. + + * emacs.texi (Top): Minor clarification. + +2006-05-03 Teodor Zlatanov <tzz@lifelogs.com> + + * commands.texi, entering.texi, screen.texi: Many simplifications. + +2006-05-03 Richard Stallman <rms@gnu.org> + + * commands.texi (Text Characters): Delete paragraph about unibyte + non-ASCII printing chars. + + * killing.texi (Killing): Say "graphical displays". + * display.texi: Say "graphical displays". + + * cmdargs.texi (Misc X): Say "graphical displays". + +2006-05-01 Richard Stallman <rms@gnu.org> + + * emacs.texi (Top): Add Diff Mode to menu. + +2006-05-01 Aaron S. Hawley <Aaron.Hawley@uvm.edu> + + * misc.texi (Diff Mode): New node. + +2006-05-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * macos.texi (Mac International): Now Carbon Emacs has ATSUI support. + (Mac Environment Variables): Shorten example line. + (Mac Font Specs): Shorten lisp lines. Add descriptions for ATSUI. + +2006-05-01 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (GUD Customization): Describe cases %d and %c. + Update description for %e. + +2006-04-30 Glenn Morris <rgm@gnu.org> + + * calendar.texi (LaTeX Calendar): Mention cal-tex-preamble-extra. + +2006-04-29 Dan Nicolaescu <dann@ics.uci.edu> + + * custom.texi (Examining): Update C-h v output example. + +2006-04-29 Kim F. Storm <storm@cua.dk> + + * building.texi (Grep Searching): Add lgrep and rgrep. + +2006-04-26 Reiner Steib <Reiner.Steib@gmx.de> + + * pgg.texi (Caching passphrase): Fix markup and typos. Simplify. + +2006-04-26 Sascha Wilde <wilde@sha-bang.de> (tiny change) + + * pgg.texi (Caching passphrase): Add pgg-gpg-use-agent. + +2006-04-24 Bill Wohler <wohler@newt.com> + + * mh-e.texi (Getting Started): Make it more explicit that you need + to install MH. Add pointers to current MH implementations. + +2006-04-23 Richard Stallman <rms@gnu.org> + + * emacs.texi [TeX]: Use xresmini.texi instead of xresources.texi. + + * xresmini.texi: New file. + + * xresources.texi (Face Resources): Split table into font resources + and the rest. Combine similar attributes for brevity. + +2006-04-21 Bill Wohler <wohler@newt.com> + + Release MH-E manual version 7.94. + + * mh-e.texi (VERSION, EDITION, UPDATED, UPDATE-MONTH): Update for + release 7.94. + +2006-04-21 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Many small fixes. + (Handling links): Rename from "Managing links". + +2006-04-21 Eli Zaretskii <eliz@gnu.org> + + * emacs-xtra.texi (MS-DOS File Names): Remove section about + backslashes and case-insensitivity in file names (moved to the + main manual). + (MS-DOS Printing): Move most of the text to the main manual. + + * msdog.texi (Windows Files, Windows HOME, MS-Windows Printing): + New nodes. + (Windows Processes, Windows System Menu): Add index entries and + fix wording. + +2006-04-20 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Spam Statistics Package): Fix typo in @pxref. + (Splitting mail using spam-stat): Fix @xref. + +2006-04-20 Chong Yidong <cyd@stupidchicken.com> + + * gnus.texi (Spam Package): Major revision of the text. + Previouly this node was "Filtering Spam Using The Spam ELisp Package". + +2006-04-20 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Time stamps): Better explanation of the purpose of + different time stamps. + (Structure editing, Plain lists): More details on how new items + and headings are inserted. + +2006-04-18 J.D. Smith <jdsmith@as.arizona.edu> + + * misc.texi (Shell Ring): Add notes on saved input when + navigating off the end of the history list. + +2006-04-18 Chong Yidong <cyd@mit.edu> + + * misc.texi (Shell Options): Correct default value of + comint-scroll-show-maximum-output. + +2006-04-18 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Formula syntax): Fix link to Calc Manual. + +2006-04-17 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Emacsen): Don't support Emacs 20.7 and XEmacs 21.1. + +2006-04-17 Bill Wohler <wohler@newt.com> + + * mh-e.texi (Folders): Update mh-before-quit-hook and + mh-quit-hook example with code that removes the buffers rather + than just bury them. + +2006-04-18 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Watch Expressions): Update. + +2006-04-17 Michael Albinus <michael.albinus@gmx.de> + + Sync with Tramp 2.0.53. + +2006-04-13 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Updating settings): New section. + (Visibility cycling): Better names for the startup folding + options. + (Exporting): Completely restructured. + (The very busy C-c C-c key): New section. + (Summary of in-buffer settings): New section. + +2006-04-12 Richard Stallman <rms@gnu.org> + + * search.texi: Clean up previous change. + +2006-04-12 Eli Zaretskii <eliz@gnu.org> + + * search.texi (Regexp Backslash, Regexp Replace): Add index + entries for ``back reference'' and mention the term itself in the + text. + +2006-04-11 Richard Stallman <rms@gnu.org> + + * custom.texi (Safe File Variables): + Document enable-local-variables = :safe. + +2006-04-11 Karl Berry <karl@gnu.org> + + * emacs-xtra.texi, emacs.texi (Dired under VC, VC Dired Commands) + (Remote Repositories, Version Backups, Local Version Control) + (Snapshots, Making and Using Snapshots, Snapshot Caveats) + (Miscellaneous Commands and Features of VC, Change Logs and VC) + (Renaming VC Work Files and Master Files) + (Inserting Version Control Headers, Customizing VC, General Options) + (Options for RCS and SCCS, Options specific for CVS): Move all + these nodes to emacs-xtra.texi, for brevity. + * cmdargs.texi, files.texi: Change cross-references. + +2006-04-11 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi, gnus-faq.texi, message.texi: Gnus v5.10.8 is released. + +2006-04-10 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Misc Group Stuff, Summary Buffer, Article Keymap) + (Server Commands): Key `v' is reserved for users. + +2006-04-11 J.D. Smith <jdsmith@as.arizona.edu> + + * files.texi (Old Versions): Update description of vc-annotate's + use of color to indicate date ranges. + +2006-04-11 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Link format): New section, emphasis on bracket links. + (External links): Document bracket links. + (FAQ): Expand to cover shell links and the new link format. + +2006-04-09 Kevin Ryde <user42@zip.com.au> + + * org.texi (Formula syntax): Typo in node name of calc-eval xref. + + * sending.texi (Mail Sending): In send-mail-function @pxref smtpmail, + put info and printed manual names the right way around. + +2006-04-09 Karl Berry <karl@gnu.org> + + * msdog.texi, emacs-xtra.texi: Move all the MS-DOS material to + emacs-xtra.texi, leaving only MS Windows information. + * building.texi, emacs.texi, frames.texi, gnu.texi, macos.texi, + * msdog.texi, mule.texi, trouble.texi: Change cross-references and + node names. + + * emacs.texi: Move @summarycontents and @contents to the beginning + of the file. + +2006-04-07 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Summary Buffer Lines): Add `*'. + +2006-04-07 Jochen K,A|(Bpper <jochen@fhi-berlin.mpg.de> + + * gnus.texi (Group Parameters): + Mention gnus-permanently-visible-groups. + +2006-04-06 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Face): Fix typo. + +2006-04-05 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (X-Face): Clarify. + (Face): Need Emacs with PNG support. + +2006-04-08 Kevin Ryde <user42@zip.com.au> + + * text.texi (Fill Commands): fill-nobreak-predicate is now a hook. + +2006-04-07 Richard Stallman <rms@gnu.org> + + * programs.texi (Comments, Comment Commands, Options for Comments) + (Multi-Line Comments): "Align", not "indent". + (Basic Indent): C-j deletes trailing whitespace before the newline. + +2006-04-06 Richard Stallman <rms@gnu.org> + + * idlwave.texi: Delete the blocks "not suitable for inclusion with + Emacs". + + * programs.texi (Basic Indent): Clarify relationship of C-j to TAB. + +2006-04-06 Eli Zaretskii <eliz@gnu.org> + + * killing.texi (Rectangles): Add index entry for marking a rectangle. + +2006-04-06 J.D. Smith <jdsmith@as.arizona.edu> + + * idlwave.texi: Updated for IDLWAVE version 6.0, factoring out + blocks not suitable for inclusion with Emacs using variable + PARTOFEMACS. + +2006-04-05 Richard Stallman <rms@gnu.org> + + * emacs.texi (Top): Update subnode menu. + + * trouble.texi (Unasked-for Search): Node deleted. + (Lossage): Delete from menu. + +2006-04-04 Richard Stallman <rms@gnu.org> + + * trouble.texi: Various cleanups. + (Checklist): Don't bother saying how to snail a bug report. + (Emergency Escape): Much rewriting. + (After a Crash): Rename the core dump immediately. + (Total Frustration): Call it a psychotherapist. + (Bug Criteria): Avoid "illegal instruction". + (Sending Patches): We always put the contributor's name in. + + * misc.texi (Thumbnails): Minor correction. + +2006-04-04 Simon Josefsson <jas@extundo.com> + + * gnus.texi (Security): Improve. + +2006-04-03 Richard Stallman <rms@gnu.org> + + * misc.texi (Thumbnails): Minor cleanup. + +2006-04-02 Karl Berry <karl@gnu.org> + + * sending.texi (Mail Sending): pxref to Top needs five args. + + * texinfo.tex: Update to current version (2006-03-21.13). + +2006-04-02 Bill Wohler <wohler@newt.com> + + * mh-e.texi (Getting Started, Junk, Bug Reports) + (MH FAQ and Support): Fix URLs. + +2006-03-31 Romain Francoise <romain@orebokech.com> + + * gnus.texi (Virtual Groups): `nnvirtual-always-rescan' defaults + to t, not nil (and has for the past eight years). + +2006-03-31 Richard Stallman <rms@gnu.org> + + * emacs.texi (Top): Update subnode menu. + + * help.texi (Help Mode): Cleanup. + + * dired.texi: Many cleanups. + (Dired Deletion): Describe dired-recursive-deletes. + (Operating on Files): dired-create-directory moved. + (Misc Dired Features): Move to here. + (Tumme): Node moved to misc.texi. + + * custom.texi: Many cleanups. + (Minor Modes): Don't mention ISO Accents Mode. + (Examining): Update C-h v output example. + (Hooks): Add index and xref for add-hook. + (Locals): Delete list of vars that are always per-buffer. Rearrange. + (Local Keymaps): Don't mention lisp-mode-map, c-mode-map. + + * misc.texi: Many cleanups. + (beginning): Add to summary of topics. + (Shell): Put eshell xref at the end. Remove eshell from table. + (Thumbnails): New node. + +2006-03-31 Reiner Steib <Reiner.Steib@gmx.de> + + * message.texi, gnus.texi: Bump version to 5.11. + +2006-03-29 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Top): Add comment about version line. + + * message.texi (Top): Ditto. Change to take named versions into + account. + +2006-03-28 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Posting Styles): Add x-face-file to example. + (X-Face): Refer to posting styles. + + * gnus-faq.texi ([5.8]): Add x-face-file. + ([8.4]): Add links to gmane.emacs.gnus.user and + gmane.emacs.gnus.general. + +2006-03-28 Eli Zaretskii <eliz@gnu.org> + + * files.texi (File Name Cache): Make it clear that the cache is + not persistent. + +2006-03-27 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus-faq.texi: Use .invalid. + ([5.4]): Fix gnus-posting-styles example. + +2006-03-27 Romain Francoise <romain@orebokech.com> + + * faq.texi (Emacs/W3): Rename from `w3-mode'. Mention that + Emacs/W3 needs a new maintainer. + (Ispell): Update author and version info. + (Mailcrypt): Mention PGG. + (New in Emacs 22): Add PGG to the list of new packages. + Include minor changes from "Ramprasad B" <ramprasad_i82@yahoo.com> + updating dead URLs. + +2006-03-25 Karl Berry <karl@gnu.org> + + * ada-mode.texi, autotype.texi, calc.texi, cc-mode.texi, cl.texi, + * dired-x.texi, ebrowse.texi, ediff.texi, emacs-mime.texi, + * emacs-xtra.texi, emacs.texi, erc.texi, eshell.texi, eudc.texi, + * faq.texi, forms.texi, gnu.texi, gnus.texi, idlwave.texi, + * info.texi, message.texi, mh-e.texi, pcl-cvs.texi, pgg.texi, + * rcirc.texi, reftex.texi, sc.texi, ses.texi, sieve.texi, + * speedbar.texi, url.texi, vip.texi, viper.texi, widget.texi, + * woman.texi: (1) use @copyright{} instead of (C) in typeset text; + (2) do not indent copyright year list (or anything else). + +2006-03-21 Bill Wohler <wohler@newt.com> + + * mh-e.texi (Folders): Various edits. + +2006-03-20 Romain Francoise <romain@orebokech.com> + + * gnus.texi (Mail Folders): Grammar fix. + +2006-03-21 Juanma Barranquero <lekktu@gmail.com> + + * files.texi (VC Dired Mode): Remove misplaced brackets. + +2006-03-21 Andre Spiegel <spiegel@gnu.org> + + * files.texi: Various updates and clarifications in the VC chapter. + +2006-03-19 Luc Teirlinck <teirllm@auburn.edu> + + * help.texi (Help Mode): Document "C-c C-c". + +2006-03-19 Bill Wohler <wohler@newt.com> + + * mh-e.texi (Replying): Document Mail-Followup-To. + Change manually-formatted table to multitable. Add debugging info. + Move description of mh-reply-default-reply-to into paragraph + that describes its values. + +2006-03-17 Bill Wohler <wohler@newt.com> + + * mh-e.texi: Use smallexample and smalllisp consistenly. + (Sending Mail Tour): Update method of entering + addresses and subject. + (Sending Mail Tour, Reading Mail Tour, Processing Mail Tour) + (Adding Attachments, Searching): Update screenshots for Emacs 22. + +2006-03-16 Luc Teirlinck <teirllm@auburn.edu> + + * emacs-xtra.texi (Top): Avoid ugly continuation line in + menu in the standalone Info reader. + +2006-03-15 Chong Yidong <cyd@stupidchicken.com> + + * emacs-xtra.texi (Emerge, Picture Mode, Fortran): New chapters, + moved here from Emacs manual. + + * programs.texi (Fortran): Section moved to emacs-xtra. + (Program Modes): Xref to Fortran in emacs-xtra. + + * maintaining.texi (Emerge): Move to emacs-xtra. + * files.texi (Comparing Files): Xref to Emerge in emacs-xtra. + + * picture.texi: File deleted. + * Makefile.in: + * makefile.w32-in: Remove picture.texi. + + * text.texi (Text): Xref to Picture Mode in emacs-xtra. + * abbrevs.texi (Abbrevs): + * sending.texi (Sending Mail): Picture node removed. + + * emacs.texi (Top): Update node listings. + +2006-03-15 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Version number change only. + +2006-03-14 Bill Wohler <wohler@newt.com> + + * mh-e.texi: Add index entries around each paragraph rather than + depend on entries from beginning of node. Doing so ensures that + index entries are less likely to be forgotten if text is cut and + pasted, and are necessary anyway if the references are on a + separate page. It seems that makeinfo is now (v. 4.8) only + producing one index entry per node, so there is no longer any + excuse not to. Use subheading instead of heading. The incorrect + use of heading produced very large fonts in Info--as large as the + main heading. + (From Bill Wohler): MH-E never did appear in Emacs 21--MH-E + versions 6 and 7 appeared *around* the time of these Emacs releases. + +2006-03-13 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Clean view): Document new startup options. + +2006-03-12 Richard Stallman <rms@gnu.org> + + * calendar.texi: Various cleanups. + +2006-03-11 Bill Wohler <wohler@newt.com> + + * mh-e.texi (Preface, More About MH-E, Options, HTML, Folders) + (Composing, Scan Line Formats): Fix @refs. + (Getting Started): Define MH profile and MH profile components. + (Incorporating Mail, Reading Mail, Viewing, Printing) + (Sending Mail, Forwarding, Editing Drafts, Inserting Letter) + (Signature, Aliases, Scan Line Formats): Use @code instead of @samp + for string constants. + (Tool Bar): Remove spurious quote. + (Junk): Use ``...'' instead of "...". + (Scan Line Formats): Replace @samp with @kbd. + +2006-03-11 Luc Teirlinck <teirllm@auburn.edu> + + * search.texi (Regexps): Use @samp for regexp that is not in Lisp + syntax. + +2006-03-10 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (NoCeM): Mention gnus-use-nocem can also be a number. + +2006-03-10 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Fancy Mail Splitting): Improve sentences so as to be + easy to understand. + +2006-03-09 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi: Markup fix. + (Fancy Mail Splitting): Specify new feature. + +2006-03-08 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Fancy Mail Splitting): Improve descriptions about + partial-words matching. + +2006-03-07 Reiner Steib <Reiner.Steib@gmx.de> + + * emacs-mime.texi (Display Customization): Reword image/.* stuff. + + * gnus.texi (Oort Gnus): Add note about `gnus-load'. + (MIME Commands): Fix mm-discouraged-alternatives. + +2006-03-08 Luc Teirlinck <teirllm@auburn.edu> + + * search.texi (Regexps): More accurately describe which characters + are special in which situations. Recommend _not_ to quote `]' or + `-' when they are not special. + +2006-03-07 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Version number change only. + +2006-03-06 Bill Wohler <wohler@newt.com> + + * mh-e.texi: Move from SourceForge repository to Savannah. + This is version 7.93, which is a total rewrite from the previous + edition 1.3 for MH-E version 5.0.2, and corresponds to MH-E + version 7.93. + +2006-03-03 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Oort Gnus): Add `mm-fill-flowed'. + +2006-03-01 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Interaction): Add item about `org-mouse.el' by + Piotr Zielinski. + (Managing links): Document that also mouse-1 can be used to + activate a link. + (Headlines, FAQ): Add entry about hiding leading stars. + (Miscellaneous): Resort the sections in this chapter to a more + logical sequence. + +2006-02-28 Andre Spiegel <spiegel@gnu.org> + + * files.texi (Old Versions): Clarify operation of C-x v =. + +2006-02-27 Simon Josefsson <jas@extundo.com> + + * emacs-mime.texi (Flowed text): Add mm-fill-flowed. (Sync + 2004-01-27 from the trunk). + +2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org> + + * cc-mode.texi: Rename c-hungry-backspace to + c-hungry-delete-backwards, at the request of RMS. Leave the old + name as an alias. + +2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org> + + * cc-mode.texi: Correct the definition of c-beginning-of-defun, to + include the function header within the defun. + +2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org> + + * cc-mode.texi: Correct two typos. + +2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org> + + * cc-mode.texi (Comment Commands): State that C-u M-; kills any + existing comment. + (Electric Keys): Add a justification for electric indentation. + (Hungry WS Deletion): Clear up the names and complications of the + BACKSPACE and DELETE keys. + +2006-02-23 Juri Linkov <juri@jurta.org> + + * faq.texi (Common requests): Move `Turning on auto-fill by + default' after `Wrapping words automatically'. Move `Working with + unprintable characters' before `Searching for/replacing newlines'. + Move `Replacing highlighted text' after `Highlighting a region'. + Merge `Repeating commands' and `Repeating a command as many times + as possible' into the former. + (Packages that do not come with Emacs): Add refs to Gmane and + etc/MORE.STUFF. + +2006-02-23 Juri Linkov <juri@jurta.org> + + * faq.texi (Newsgroup archives): Update URLs of GNU mail archives. + (Reporting bugs): Suggest using `M-x report-emacs-bug'. + Add xref to `(emacs)Reporting Bugs'. + (Getting a printed manual): Add URL to other formats of the manual. + (Common requests): Fix menu. + (Highlighting a region): Remove ref to `Turning on syntax highlighting'. + (Horizontal scrolling): Mention `truncate-partial-width-windows'. + (Inserting text at the beginning of each line): Add pxref to + `Changing the included text prefix'. + (Forcing the cursor to remain in the same column): Mention `track-eol' + and `set-goal-column'. Add pxref to `(emacs)Moving Point'. + (Replacing text across multiple files): Add keybinding `Q' for + `dired-do-query-replace'. + +2006-02-22 Carsten Dominik <dominik@science.uva.nl> + + * reftex.texi: Version number and date change only. + + * org.texi (Internal Links): Rewrite to cover the modified + linking system. + +2006-02-21 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Watch Expressions): Update and describe + gdb-speedbar-auto-raise. + +2006-02-19 Richard M. Stallman <rms@gnu.org> + + * emacs.texi: Use @smallbook. + (Top): Update ref to Emacs paper, delete ref to Cookbook. + Update subnode menu. + + * building.texi (Lisp Interaction): Minor addition. + +2006-02-18 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Watch Expressions): Update and be more precise. + +2006-02-17 Eli Zaretskii <eliz@gnu.org> + + * faq.texi: Remove the coding cookie, it's not needed anymore. + +2006-02-15 Francesco Potort,Al(B <pot@gnu.org> + + * maintaining.texi (Create Tags Table): Explain why the + exception when etags writes to files under the /dev tree. + +2006-02-14 Richard M. Stallman <rms@gnu.org> + + * custom.texi (Safe File Variables): Lots of clarification. + Renamed from Unsafe File Variables. + +2006-02-14 Chong Yidong <cyd@stupidchicken.com> + + * custom.texi (Unsafe File Variables): File variable confirmation + assumed denied in batch mode. + +2006-02-14 Richard M. Stallman <rms@gnu.org> + + * building.texi (GDB User Interface Layout): Don't say `inferior' + for program being debugged. + +2006-02-15 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (GDB Graphical Interface): + Replace gdb-use-inferior-io-buffer with gdb-use-separate-io-buffer. + +2006-02-13 Chong Yidong <cyd@stupidchicken.com> + + * custom.texi (Specifying File Variables, Unsafe File Variables): + New nodes, split from File Variables. Document new file local + variable behavior. + +2006-02-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * display.texi (Standard Faces): + * faq.texi (Colors on a TTY): + * files.texi (Visiting): + * frames.texi (Clipboard): + * glossary.texi (Glossary) <Clipboard>: + * xresources.texi (X Resources): Mention Mac OS port. + +2006-02-12 Karl Berry <karl@gnu.org> + + * faq.texi (Emacs for Atari ST): Use Sch@"auble instead of the + 8-bit accented a. + +2006-02-12 Richard M. Stallman <rms@gnu.org> + + * building.texi (Building): Clarify topic in intro. + + * maintaining.texi (Maintaining): Change title; clarify topic. + Delete duplicate index entries. + + * building.texi (Other GDB User Interface Buffers): Clarifications. + + * text.texi (Cell Commands): Clarifications. + + * programs.texi (Defuns): Delete duplicate explanation of + left-margin paren convention. + (Hungry Delete): Minor cleanup. + +2006-02-11 Mathias Dahl <mathias.dahl@gmail.com> + + * dired.texi (Tumme): More tumme documentation. + +2006-02-11 Alan Mackenzie <acm@muc.de> + + * programs.texi ("Hungry Delete"): Correct the appellation of the + backspace and delete keys to @kbd{DEL} and @kbd{DELETE}. + +2006-02-11 Mathias Dahl <mathias.dahl@gmail.com> + + * dired.texi (Tumme): Fix small bug. + +2006-02-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * macos.texi (Mac International): Rename "fontset-mac" to + "fontset-standard". + +2006-02-09 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Gnus Versions): Add history beyond start of Oort. + +2006-02-09 Mathias Dahl <mathias.dah@gmail.com> + + * dired.texi (Tumme): Basic documentation for Tumme added. + +2006-02-08 Romain Francoise <romain@orebokech.com> + + * faq.texi (Top): Remove paragraph about the FAQ being a + transitional document, etc. + (Searching for/replacing newlines): New node. + (Yanking text in isearch): New node. + (Inserting text at the beginning of each line): Rename and make + more general, mention `M-;' in Message mode. + +2006-02-07 Luc Teirlinck <teirllm@auburn.edu> + + * mule.texi (International): + * programs.texi (Basic Indent): Fix typos. + + * faq.texi (Meta key does not work in xterm) + (Emacs does not display 8-bit characters) + (Inputting eight-bit characters): + * custom.texi (Minor Modes): + * display.texi (Text Display): + * commands.texi (Text Characters): Update xrefs. + +2006-02-07 Richard M. Stallman <rms@gnu.org> + + * emacs.texi (Top): Update subnode menu. + Update info on old Emacs papers. + (Intro): "Graphical display", not window system. + + * xresources.texi (GTK styles): Minor clarifications. + + * trouble.texi: "Graphical display", not window system. + (Stuck Recursive): Minor clarification. + + * text.texi: Minor clarifications. + (Sentences): Explain why two-space convention is better. + Explain sentence-end-without-period here. + (Fill Commands): Not here. + (Refill): Node moved down. + (Filling): Update menu. + (Table Creation, Cell Justification, Column Commands): Clarify. + + * sending.texi: Minor clarifications. + + * search.texi (Regexp Backslash): Clarification. + + * rmail.texi: Minor cleanups. + (Rmail): Delete digression about `rmail-mode'. + (Rmail Inbox): Delete false advice wrt rmail-primary-inbox-list. + (Rmail Files): Mention C-u M-x rmail. + (Rmail Reply): Mention References. + (Rmail Display): Mention rmail-nonignored-headers. + + * programs.texi: Minor cleanups. + (Comment Commands): Mention momentary Transient Mark mode. + (Matching): Be more specific about customizing show-paren-mode. + (Info Lookup): Don't list the modes that support C-h S. + Just say what it does in an unsupported mode. + (Man Page): Delete excessive info on customizing woman. + (Motion in C): Don't mention c-for/backward-into-nomenclature. + + * abbrevs.texi: Minor clarifications. + (Dabbrev Customization): Talk about "dynamic abbrev expansion", + not "dynamic abbrevs" as if they were a kind of abbrev. + + * picture.texi (Picture): Minor cleanup. + + * mule.texi (Communication Coding): Say "other applications". + (Fontsets): Not specific to X. Add xref to X Resources. + (Unibyte Mode): Rename from Single-Byte Character Support. + "Graphical display", not window system. + (International): Update menu. + + * maintaining.texi (Format of ChangeLog): + New node, split out from ChangeLog. + (ChangeLog): Clarifications in the remaining text. + (Create Tags Table, Etags Regexps, Select Tags Table): Cleanups. + (Find Tag): Add @w. + (Tags Search): Explain tag table order here. Simplify grep ref. + (List Tags): tags-tag-face is a variable, not a face. + (Emerge): Cleanups. + + * kmacro.texi (Keyboard Macro Counter): Rewrite for clarity. + (Keyboard Macros): Avoid "the user". + + * killing.texi: "Graphical display", not window system. + + * help.texi (Help Echo): "Graphical display", not window system. + + * glossary.texi: Say "you", not "the user". Say "graphical display". + + * frames.texi: Minor cleanups. "Graphical display", not window system. + + * files.texi (Visiting): Make drag-and-drop not X-specific. + + * custom.texi: Minor cleanups. "Graphical display", not window system. + + * cmdargs.texi: Minor cleanups. + + * building.texi (Compilation): Move and split kill-compilation para. + Add para about multiple compilers. + (Compilation Mode): Commands also available in grep mode and others. + Mention C-u C-x ` more tutorially. Clarify C-x `. + (Compilation Shell): Clarify. Put Bash example first. + (Grep Searching): Minor cleanups; add @w. + (Debuggers): Minor cleanups. + (Starting GUD): Make GDB xgraphical mode issue clearer. + (Debugger Operation): Lots of clarifications including + GDB tooltip side-effect issue. + (Commands of GUD): Clarify. + (GUD Customization): Add bashdb-mode-hook. + (GDB Graphical Interface): Rewrite for clarity. + (GDB User Interface Layout): Rewrite for clarity. + (Stack Buffer, Watch Expressions): Likewise. + (Other GDB User Interface Buffers): Cleanups. + (Lisp Libraries, External Lisp): Cleanup. + + * basic.texi (Position Info): "Graphical displays", rather than + window systems. + + * anti.texi: Minor cleanup. + +2006-02-06 Romain Francoise <romain@orebokech.com> + + * faq.texi (VM): VM now at version 7.19. + Set myself as maintainer of this file. + +2006-02-04 Michael Olson <mwolson@gnu.org> + + * erc.texi (History): Note that ERC is now included with Emacs. + +2006-02-03 Eli Zaretskii <eliz@gnu.org> + + * custom.texi (Init File, Find Init): Add cross-references to + where $HOME is described. + +2006-02-01 Luc Teirlinck <teirllm@auburn.edu> + + * frames.texi (Frame Parameters): Remove @item for S-Mouse-1; it + is not inside the @table. + + * emacs.texi (Top): Correct node name. + + * files.texi (File Names): Fix @xref. + (Reverting): Fix typo. + + * mule.texi (International): Correct node name. + + * kmacro.texi (Save Keyboard Macro): Add missing @kbd to @table. + +2006-02-01 Richard M. Stallman <rms@gnu.org> + + * emacs.texi (Top): Update subnode menu. + + * mule.texi: Minor clarifications. + Reduce the specific references to X Windows. + Refer to "graphical" terminals, rather than window systems. + (Text Coding): Rename from Specify Coding. + (Communication Coding, File Name Coding, Terminal Coding): + New nodes split out from Text Coding. + + * kmacro.texi: Minor clarifications. + (Keyboard Macro Ring): Comment out some excessive commands. + (Basic Keyboard Macro): Split up the table, putting part in each node. + + * major.texi: Minor clarifications. + + * misc.texi (Single Shell, Interactive Shell): Fix xrefs. + + * windows.texi: Minor clarifications. + (Change Window): Don't describe mode-line mouse cmds here. + Add xref to Mode Line Mouse. + + * msdog.texi (Text and Binary, MS-DOS and MULE): Fix xrefs. + + * macos.texi (Mac International): Fix xref. + + * indent.texi: Minor clarifications. + + * frames.texi: Minor clarifications. + Reduce the specific references to X Windows. + Refer to "graphical" terminals, rather than window systems. + (Frame Parameters): Don't mention commands like + set-foreground-color. Just say to customize a face. + (Drag and Drop): Lisp-level stuff moved to Emacs Lisp manual. + + * files.texi: Minor clarifications. + (Numbered Backups): New node, split out from Backup Names. + + * display.texi (Font Lock): C mode no longer depends on (-in-col-0. + + * cmdargs.texi (General Variables): Fix xref. + + * buffers.texi: Minor clarifications. + +2006-01-31 Romain Francoise <romain@orebokech.com> + + * message.texi (Message Headers): Explain what + `message-alternative-emails' does in more detail. + Update copyright year. + +2006-01-31 Richard M. Stallman <rms@gnu.org> + + * display.texi (Scrolling, Horizontal Scrolling, Follow Mode): + Nodes moved to top. + + * display.texi: Minor clarifications. + (Display): Rearrange menu. + (Standard Faces): Mention query-replace face. + (Faces): Simplify. + (Font Lock): Simplify face customization info. + (Highlight Changes): Node merged into Highlight Interactively. + (Highlight Interactively): Much rewriting and cleanup. + (Optional Mode Line): Narrowed line number not good for goto-line. + Simplify face customization advice. + (Text Display): Mention use of escape-glyph face. + Move ctl-arrow and tab-width here. + (Display Custom): Move no-redraw-on-reenter to end of node. + + * search.texi: Minor clarifications. + (Isearch Scroll): Simplify. + (Other Repeating Search): Document multi-occur-in-matching-buffers. + + * regs.texi (Registers): Mention bookmarks here. + + * mark.texi: Minor clarifications. + (Selective Undo): Node deleted. + + * m-x.texi: Minor clarifications. + + * killing.texi: Minor clarifications. + Refer to "graphical" terminals, rather than window systems. + + * help.texi: Clarifications. + (Help): Don't describe C-h F and C-h K here. + (Key Help): Describe C-h K here. + (Name Help): Mention Emacs Lisp Intro. + Describe C-h F here. + (Misc Help): Mention C-h F and C-h K only briefly. + + * fixit.texi (Undo): New node, mostly copied from basic.texi. + Selective undo text merged in. + (Spelling): Mention Aspell along with Ispell. + + * emacs.texi (Top): Update subnode menus. + + * basic.texi (Basic Undo): Rename from Undo. Most of text + moved to new Undo node. + +2006-01-30 Juanma Barranquero <lekktu@gmail.com> + + * makefile.w32-in (clean): Add newsticker, sieve, pgg, erc and rcirc. + +2006-01-29 Chong Yidong <cyd@stupidchicken.com> + + * basic.texi (Continuation Lines, Inserting Text): + Mention longlines mode. + +2006-01-29 Richard M. Stallman <rms@gnu.org> + + * screen.texi: Minor cleaups. + (Screen): Clean up the intro paragraphs. + (Mode Line): Lots of rewriting. Handle frame-name better. + eol-mnemonic-... vars moved out. + + * emacs.texi (Top): Change menu item for MS-DOS node. + Update subnode menu. + + * msdog.texi (MS-DOS): Rewrite intro to explain how this + chapter relates to Windows. Title changed. + + * mini.texi: Minor cleanups. + + * mark.texi (Selective Undo): New node, text moved from basic.texi. + (Mark): Put it in the menu. + + * entering.texi: Minor cleanups. + + * emacs.texi (Top): Add xref to Mac chapter; explain Windows better. + (Intro): Refer to "graphical" terminals, rather than X. + + * display.texi (Display Custom): Add xref to Variables. + (Optional Mode Line): eol-mnemonic-... vars moved here. + + * commands.texi: Minor cleanups. Refer to "graphical" terminals, + rather than X. + + * cc-mode.texi (Indentation Commands): Inserts newline, not "linefeed". + + * basic.texi: Minor cleanups. + (Undo): selective-undo moved. + +2006-01-29 Michael Olson <mwolson@gnu.org> + + * makefile.w32-in ($(infodir)/erc, erc.dvi): New targets. + + * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add ERC. + + * faq.texi (New in Emacs 22): Mention ERC. + +2006-01-28 Luc Teirlinck <teirllm@auburn.edu> + + * rcirc.texi: Capitalize dir entry for consistency with the entry + in info/dir and other entries in the Emacs category. + Fix typos. Delete trailing whitespace. + +2006-01-28 Bj,Av(Brn Lindstr,Av(Bm <bkhl@elektrubadur.se> + + * rcirc.texi: Some @cindex changes, some changes from @kbd to @key. + +2006-01-27 Eli Zaretskii <eliz@gnu.org> + + * makefile.w32-in ($(infodir)/rcirc, rcirc.dvi): New targets. + (INFO_TARGETS, DVI_TARGETS): Add rcirc. + + * Makefile.in (../info/rcirc, rcirc.dvi): New targets. + (INFO_TARGETS, DVI_TARGETS): Add rcirc. + +2006-01-27 Alex Schroeder <alex@gnu.org> + + * rcirc.texi: New file. + +2006-01-25 Luc Teirlinck <teirllm@auburn.edu> + + * anti.texi (Antinews): Various corrections and additions. + +2006-01-23 Juri Linkov <juri@jurta.org> + + * custom.texi (Easy Customization, Customization Groups) + (Browsing Custom): Mention links along with buttons. + + * widget.texi (User Interface): Add S-TAB for widget-backward. + +2006-01-22 Michael Albinus <michael.albinus@gmx.de> + + Sync with Tramp 2.0.52. + + * tramp.texi (Frequently Asked Questions): Remove Ange-FTP item. + Add Tramp disabling item. New item for common connection problems. + (various): Apply "ftp" as method for the download URL. + (Bug Reports): Refer to FAQ for common problems. + +2006-01-21 Eli Zaretskii <eliz@gnu.org> + + * widget.texi (User Interface): Use @key for TAB. + + * text.texi (TeX Print): Use @key for TAB. + + * ses.texi (Formulas, Printer functions): Use @key for TAB. + + * kmacro.texi (Keyboard Macro Step-Edit): Use @key for TAB. + + * ebrowse.texi (Switching to Tree, Symbol Completion): Use @key + for TAB. + + * cc-mode.texi (Indentation Calculation): Use @key for TAB. + +2006-01-15 Sven Joachim <svenjoac@gmx.de> (tiny change) + + * files.texi (File Aliases): Don't claim that usually separate + buffers are created for two file names that name the same data. + Mention additional situations where different names mean the same + file on disk. + +2006-01-19 Richard M. Stallman <rms@gnu.org> + + * killing.texi (Deletion): Upcase @key argument. + + * custom.texi (Custom Themes): Minor cleanup. + + * programs.texi (Hungry Delete): Upcase @key argument. + +2006-01-16 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi: Update copyright. + +2006-01-16 Juri Linkov <juri@jurta.org> + + * display.texi (Standard Faces): Add `mode-line-buffer-id'. + Move `mode-line-highlight' before `mode-line-buffer-id'. + +2006-01-13 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Article Washing): Additions. + +2006-01-08 Alex Schroeder <alex@gnu.org> + + * pgg.texi (Caching passphrase): Rewording. + +2006-01-14 Richard M. Stallman <rms@gnu.org> + + * basic.texi (Inserting Text): Minor cleanup. + +2006-01-13 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Agenda commands): Document tags command. + +2006-01-11 Luc Teirlinck <teirllm@auburn.edu> + + * custom.texi (Changing a Variable, Face Customization): + Update for changes in Custom menus. + +2006-01-10 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (RSS): Document nnrss-wash-html-in-text-plain-parts. + +2006-01-06 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (RSS): Addition. + +2005-12-22 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Summary Post Commands): Fix function bound to `S O p'. + +2005-12-19 Katsumi Yamaoka <yamaoka@jpl.org> + + * emacs-mime.texi (Display Customization): Add setting example to + mm-discouraged-alternatives. + +2006-01-09 Stefan Monnier <monnier@iro.umontreal.ca> + + * flymake.texi (Obtaining Flymake): Remove chapter since Emacs's + version is the canonical version. + +2006-01-08 Alex Schroeder <alex@gnu.org> + + * pgg.texi (Caching passphrase): Rewording. + +2006-01-06 Eli Zaretskii <eliz@gnu.org> + + * flymake.texi (Obtaining Flymake): Update Flymake's CVS + repository URL. + +2006-01-06 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Removed the accidentally re-added empty line in the + direntry. + +2006-01-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * macos.texi (Mac International): Undo last change. + +2006-01-05 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Agenda Views): Chapter reorganized. + +2006-01-02 Chong Yidong <cyd@stupidchicken.com> + + * custom.texi (Custom Themes): Describe the new + customize-create-theme interface. + +2005-12-30 Juri Linkov <juri@jurta.org> + + * basic.texi (Position Info): Update example. + +2005-12-29 Romain Francoise <romain@orebokech.com> + + * faq.texi (Using Customize): New node. + +2005-12-28 Luc Teirlinck <teirllm@auburn.edu> + + * org.texi: Remove blank line in @direntry. It is non-standard + and recursively produces blank lines all over the dir file (when + using Texinfo 4.8). + +2005-12-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * frames.texi (Dialog Boxes): Add x-gtk-show-hidden-files. + +2005-12-24 Chong Yidong <cyd@stupidchicken.com> + + * custom.texi (Custom Themes): `load-theme' always loads. + +2005-12-23 Juri Linkov <juri@jurta.org> + + * display.texi (Highlight Interactively): Use double space to + separate sentences. Replace C-p with M-p, and C-n with M-n. + +2005-12-22 Richard M. Stallman <rms@gnu.org> + + * custom.texi (Easy Customization and subnodes): + Replace "active field" with "button". + Use "user option" only for variables. + Use "setting" for variable-or-face. + +2005-12-22 Luc Teirlinck <teirllm@auburn.edu> + + * buffers.texi (Select Buffer): Change order in table to make + "Similar" refer to the correct item. + (Indirect Buffers): Minor rewording. + +2005-12-21 Luc Teirlinck <teirllm@auburn.edu> + + * widget.texi (atoms): Delete obsolete remark about `file' widget. + +2005-12-20 Juri Linkov <juri@jurta.org> + + * files.texi (VC Status): Put P and N near p and n. + +2005-12-20 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Tags): Boolean logic documented. + (Agenda Views): Document custom commands. + +2005-12-20 David Kastrup <dak@gnu.org> + + * faq.texi (AUCTeX): Update version and mailing list info. + +2005-12-19 Richard M. Stallman <rms@gnu.org> + + * programs.texi (Electric C): Delete the info about newline control. + (Other C Commands): Minor cleanup. + (Left Margin Paren): Minor cleanup. + +2005-12-19 Luc Teirlinck <teirllm@auburn.edu> + + * custom.texi (Easy Customization): Add "Browsing Custom" to menu. + (Customization Groups): Delete text moved to "Browsing Custom". + (Browsing Custom): New node. + (Specific Customization): Clarify which commands only work for + loaded options. + +2005-12-18 Bill Wohler <wohler@newt.com> + + * frames.texi (Tool Bars): Shorten text of previous change. + +2005-12-18 Aaron S. Hawley <Aaron.Hawley@uvm.edu> + + * files.texi (VC Status): Document log-view mode. + +2005-12-18 Bill Wohler <wohler@newt.com> + + * frames.texi (Tool Bars): Mention that you can turn off tool bars + permanently via the customize interface. + +2005-12-17 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (MIME Commands): Mention addition of + multipart/alternative to gnus-buttonized-mime-types and add xref + to mm-discouraged-alternatives. + + * emacs-mime.texi (Display Customization): Mention addition of + "image/.*" and add xref to gnus-buttonized-mime-types in the + mm-discouraged-alternatives section. + +2005-12-16 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Tags): New section. + (Agenda Views): Chapter reorganized. + +2005-12-16 Ralf Angeli <angeli@iwi.uni-sb.de> + + * killing.texi (Killing by Lines): Document `kill-whole-line' + function. + +2005-12-16 Eli Zaretskii <eliz@gnu.org> + + * org.texi (Internal Links): Add a missing comma after an @xref. + +2005-12-16 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu> + + * buffers.texi (Select Buffer): Change `prev-buffer' to + `previous-buffer'. Indicate that these functions use a frame + local buffer list. + +2005-12-14 Chong Yidong <cyd@stupidchicken.com> + + * faq.texi (Filling paragraphs with a single space): No need to + change sentence-end now. + +2005-12-13 Romain Francoise <romain@orebokech.com> + + * faq.texi (Scrolling only one line): Use `scroll-conservatively'. + +2005-12-12 Jay Belanger <belanger@truman.edu> + + * faq.texi (Calc): Update version number. + +2005-12-12 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Progress Logging): New section. + +2005-12-12 Richard M. Stallman <rms@gnu.org> + + * custom.texi (Easy Customization): Change menu comment. + (Prefix Keymaps): Fix spelling of Control-X-prefix. + + * help.texi (Apropos): Rewrite. Talk about "apropos patterns". + (Help): Among the Apropos commands, describe only C-h a here. + +2005-12-11 Richard M. Stallman <rms@gnu.org> + + * programs.texi (Options for Comments): Comment-end starts with space. + + * glossary.texi (Glossary): Minor cleanup. + + * files.texi (Old Versions): Use @table. + +2005-12-10 Romain Francoise <romain@orebokech.com> + + Update the Emacs FAQ for the 22.1 release. + + * faq.texi: Set VER to `22.1'. + (Basic editing): Explain how to use localized versions of the + Tutorial. Mention that `C-h r' displays the manual. Delete + obsolete WWW link to an Emacs 18 tutorial. + (Getting a printed manual): Point to the new locations of the + manuals on the GNU Web site. + (Emacs Lisp documentation): Explain that the Emacs Lisp manual is + available via Info (it was previously distributed separately). + (Installing Texinfo documentation): The latest version of Texinfo + is 4.8, not 4.0. + (Informational files for Emacs): COPYING is the GNU General Public + License, not the Emacs General Public License. + (Informational files for Emacs): Delete obsolete link to the + GNUinfo pages as they have been removed from the GNU Web site. + (New in Emacs 22): New node. + (Setting up a customization file): Say that most packages support + Customize nowadays. + (Colors on a TTY): Delete reference to instructions on how to + enable syntax highlighting, it is now enabled by default. + (Turning on abbrevs by default): Emacs now reads the abbrevs file + at startup automatically. + (Controlling case sensitivity): Mention `M-c' in isearch. + (Using an already running Emacs process): Emacs now creates the + socket in `/tmp/emacsUID'. Fix typos. Change default location of + gnuserv. As emacsclient can now run Lisp code as well, delete a + sentence praising gnuserv for that. Simplify description of how + the client/server operation works. + (Compiler error messages): Delete obsolete text (compile.el has + been rewritten). + (Indenting switch statements): Fix typo. + (Matching parentheses): Simplify setup instructions, mention the + menu bar item in the Options menu. + (Repeating a command as many times as possible): Mention `C-x e'. + (Going to a line by number): Mention new keymap and bindings + `M-g M-g', `M-g M-p' and `M-g M-n'. + (Turning on syntax highlighting): Now on by default. Simplify. + (Replacing highlighted text): Use `1', not `t'. + (Problems with very large files): The maximum size is now 256MB on + 32-bit machines. + (^M in the shell buffer): Mention `comint-process-echoes'. + (Emacs for Apple computers): Emacs 22 has native support for Mac + OS X. + (Translating names to IP addresses): Delete node. + (Binding keys to commands): Fix typo. + (SPC no longer completes file names): New node. + (MIME with Emacs mail packages): Delete section about the Emacs + MIME FAQ (it's not reachable anymore). + +2005-12-10 David Koppelman <koppel@ece.lsu.edu> + + * display.texi (Highlight Interactively): Include + global-hi-lock-mode. Add miscellaneous details and elaborations. + +2005-12-09 Richard M. Stallman <rms@gnu.org> + + * display.texi (Font Lock): Delete the Global FL menu item. + +2005-12-09 Luc Teirlinck <teirllm@auburn.edu> + + * custom.texi (Minibuffer Maps): Mention the maps for file name + completion. + +2005-12-09 Kim F. Storm <storm@cua.dk> + + * killing.texi (CUA Bindings): Describe how to use C-x and C-c as + prefix keys even when mark is active. Decribe that RET moves + cursor to next corner in rectangle; clarify insert around rectangle. + +2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org> + + * cc-mode.texi: The manual has been extensively revised: the + information about using CC Mode has been separated from the larger + and more difficult chapters about configuration. It has been + updated for CC Mode 5.31. + +2005-12-05 Katsumi Yamaoka <yamaoka@jpl.org> + + * pgg.texi (User Commands): Fix description of pgg-verify-region. + (Selecting an implementation): Fix descriptions. + +2005-11-30 Katsumi Yamaoka <yamaoka@jpl.org> + + * message.texi (Various Message Variables): Addition. + +2005-11-29 Katsumi Yamaoka <yamaoka@jpl.org> + + * message.texi: Fix default values. + +2005-11-25 Katsumi Yamaoka <yamaoka@jpl.org> + + * message.texi (Header Commands): Clarify descriptions of + message-cross-post-followup-to, message-reduce-to-to-cc, and + message-insert-wide-reply. + (Various Commands): Fix kindex for message-kill-to-signature; + clarify description of message-tab. + +2005-11-22 Katsumi Yamaoka <yamaoka@jpl.org> + + * message.texi (Mailing Lists): Fix description about MFT. + + * gnus.texi (Emacs Lisp): Use ~/.gnus.el instead of ~/.emacs. + +2005-11-17 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Slow Terminal Connection): Replace old description + with new one. + +2005-11-16 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Oort Gnus): Use ~/.gnus.el instead of ~/.emacs; + replace X-Draft-Headers with X-Draft-From. + +2005-11-14 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Various Various): Fix the default value of + nnheader-max-head-length. + (Gnus Versions): Fix typo. + +2005-12-08 Luc Teirlinck <teirllm@auburn.edu> + + * custom.texi (Customization): Use xref to elisp manual for + non-TeX output. + (Minor Modes): Update. + (Customization Groups, Changing a Variable, Face Customization): + Update for new appearance of Custom buffers. + (Changing a Variable): `custom-buffer-done-function' has been + replaced by `custom-buffer-done-kill'. + (Specific Customization): In the `customize-group' buffer, a + subgroup's contents are not "hidden". They are not included at + all. They have no [Show] button. + (Mouse Buttons): Add pxref to description of mouse event lists in + Elisp manual. Add `menu-bar' and `header-line' dummy prefix keys. + (Find Init): Emacs now looks for ~/.emacs.d/init.el instead of + ~/.emacs.d/.emacs, if it can not find ~/.emacs(.el). + +2005-12-08 Richard M. Stallman <rms@gnu.org> + + * mini.texi (Completion Commands, Completion): + In file name input, SPC does not do completion. + +2005-12-08 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Structure editing): Document new functionality of + M-RET. + +2005-12-08 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (GDB Graphical Interface): Explain screen size + setting. + (Other GDB User Interface Buffers): Describe features specific to + GDB 6.4. + +2005-12-06 Luc Teirlinck <teirllm@auburn.edu> + + * org.texi (Internal Links): Fix Texinfo usage. + +2005-12-06 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (TODO basics): Document the global todo list. + (TODO items): Documents sparse tree for specific TODO + keywords. + +2005-12-01 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (GDB User Interface Layout): Describe how to + kill associated buffers. + (Breakpoints Buffer): Use D instead of d for gdb-delete-breakpoint. + (Watch Expressions): Be more precise. + (Other GDB User Interface Buffers): Describe how to change a + register value. + +2005-11-30 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Plain Lists): Typos fixed. + +2005-11-28 Jay Belanger <belanger@truman.edu> + + * calc.texi: Change references of `M-#' to `C-x *' prefix. + +2005-11-24 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Structure editing): New item moving commands added. + (Plain Lists): New section. + +2005-11-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * macos.texi (Mac Input): Remove description of + mac-command-key-is-meta. Add descriptions of + mac-control-modifier, mac-command-modifier, and + mac-option-modifier. + (Mac International): Fix description of conversion of clipboard data. + (Mac Font Specs): Add example of font customization by face attributes. + +2005-11-22 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Watch Expressions): Expand description. + (Other GDB User Interface Buffers): Describe local map for + gud-watch. + +2005-11-21 Chong Yidong <cyd@stupidchicken.com> + + * display.texi (Font Lock): Font lock is enabled by default now. + +2005-11-20 Juri Linkov <juri@jurta.org> + + * basic.texi (Position Info): Update examples of the output. + Remove the fact that examples are produced in the TeXinfo buffer, + because in the Info reader users will get a different output from + `C-x ='. + + * building.texi (Compilation Mode): Remove paragraph duplicated + from the node `Compilation'. Add `compilation-skip-threshold'. + + * display.texi (Font Lock): Suggest more user-friendly method of + finding all Font Lock faces (M-x customize-group RET font-lock-faces). + +2005-11-18 Richard M. Stallman <rms@gnu.org> + + * files.texi (Registering): Mention @@ in mode line. + + * mini.texi (Minibuffer File): Clarify previous change. Add @findex. + +2005-11-08 Aaron S. Hawley <Aaron.Hawley@uvm.edu> + + * files.texi (Renaming and VC): Some back-ends don't + handle renaming. + +2005-11-18 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (FAQ): Document `org-table-tab-jumps-over-hlines'. + (Agenda): Document commands `org-cycle-agenda-files' and + `org-agenda-file-to-front' + (Built-in table editor): Document `org-table-sort-lines'. + (HTML formatting): Export of hand-formatted lists. + +2005-11-17 Juri Linkov <juri@jurta.org> + + * emacs.texi (Top): + * display.texi (Highlight Interactively): Put this font-lock based + mode near Font Lock node. + +2005-11-16 Chong Yidong <cyd@stupidchicken.com> + + * ack.texi (Acknowledgments): Acknowledge Andrew Zhilin for Emacs + icons. + +2005-11-12 Kim F. Storm <storm@cua.dk> + + * help.texi (Help): Fix C-h a entry. Add C-h d entry. + (Help Summary): Add C-h d and C-h e. + (Apropos): Clarify that all apropos commands may search for either + list of words or a regexp. Add C-h d for apropos-documentation. + Describe apropos-documentation-sort-by-scores user option. + +2005-11-10 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (XVarious): Fix description of gnus-use-toolbar; add + new variable gnus-toolbar-thickness. + +2005-11-08 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (XVarious): Revert description of gnus-use-toolbar. + +2005-11-07 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (X-Face): Fix description. + (XVarious): Remove gnus-xmas-logo-color-alist and + gnus-xmas-logo-color-style; fix description of gnus-use-toolbar. + +2005-11-01 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Group Parameters): Mention new variable + gnus-parameters-case-fold-search. + (Home Score File): Addition. + +2005-11-09 Luc Teirlinck <teirllm@auburn.edu> + + * killing.texi (CUA Bindings): Add @section. + +2005-11-10 Kim F. Storm <storm@cua.dk> + + * emacs.texi (Top): Add CUA Bindings entry to menu. + + * killing.texi (CUA Bindings): New node. Moved here from + misc.texi and extended with info on rectangle commands and + rectangle highlighting, interface to registers, and the global + mark feature. + + * misc.texi (Emulation): Move CUA bindings item to killing.texi. + + * regs.texi: Prev link points to CUA Bindings node. + +2005-11-07 Luc Teirlinck <teirllm@auburn.edu> + + * help.texi (Help Echo): By default, help echos are only shown on + mouse-over, not on point-over. + +2005-11-04 J,Ai(Br,At(Bme Marant <jerome@marant.org> + + * misc.texi (Shell Mode): Describe how to activate password echoing. + +2005-11-04 Ulf Jasper <ulf.jasper@web.de> + + * newsticker.texi: VERSION changed to 1.9. Updated UPDATED. + (Overview): List supported feed types. + (Installation): No installation necessary when using autoload. + (Configuration): Rename "RSS" to "news". + +2005-11-04 Ken Manheimer <ken.manheimer@gmail.com> + + * pgg.texi (User Commands): Document additional passphrase + argument for pgg-encrypt-*, pgg-decrypt-*, and pgg-sign-* functions. + (Backend methods): Likewise for corresponding pgg-scheme-* functions. + +2005-11-04 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Version number changed to 3.19. + +2005-11-04 Romain Francoise <romain@orebokech.com> + + * mark.texi (Mark Ring): Fix typo. + +2005-11-03 Richard M. Stallman <rms@gnu.org> + + * mark.texi (Mark Ring): Mention set-mark-command-repeat-pop. + +2005-11-01 Bill Wohler <wohler@newt.com> + + * help.texi (Help Mode): Fix typo. + +2005-11-01 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Other GDB User Interface Buffers): Describe + the command gdb-use-inferior-io-buffer. + +2005-10-31 Romain Francoise <romain@orebokech.com> + + * files.texi (Compressed Files): Fix typo. + + * buffers.texi (Misc Buffer): Downcase `*shell*'. + + * windows.texi (Force Same Window): Likewise. + +2005-10-30 Bill Wohler <wohler@newt.com> + + * help.texi (Help Mode): URLs viewed with browse-url. + +2005-10-31 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (GDB Graphical Interface): Don't reference + gdb-mouse-set-clear-breakpoint. Explain gdb-mouse-until + must stay in same frame. + +2005-10-29 Chong Yidong <cyd@stupidchicken.com> + + * custom.texi (Init File): Document ~/.emacs.d/init.el. + + * anti.texi (Antinews): Likewise. + +2005-10-29 Sascha Wilde <wilde@sha-bang.de> + + * pgg.texi (How to use): Update the example to add autoload of + pgg-encrypt-symmetric-region. + (User Commands): Document pgg-encrypt-symmetric-region. + (Backend methods): Document pgg-scheme-encrypt-symmetric-region. + +2005-10-28 Bill Wohler <wohler@newt.com> + + * help.texi (Help): Help mode now creates hyperlinks for URLs. + +2005-10-28 Richard M. Stallman <rms@gnu.org> + + * files.texi (Visiting): Explain how to enter ? in a file name. + + * trouble.texi (Memory Full): Mention !MEM FULL! in mode line. + +2005-10-27 Jay Belanger <belanger@truman.edu> + + * calc.texi (Predefined Units): Fix the symbol for a TeX points, + mention other TeX-related units. + +2005-10-25 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (GDB Graphical Interface): Describe + gdb-mouse-until. + +2005-10-23 Richard M. Stallman <rms@gnu.org> + + * custom.texi (Init File): Recommend when to use site-start.el. + +2005-10-23 Lars Hansen <larsh@soem.dk> + + * dired-x.texi (Miscellaneous Commands): Replace + dired-do-relative-symlink by dired-do-relsymlink and + dired-do-relative-symlink-regexp by dired-do-relsymlink-regexp. + +2005-10-23 Jay Belanger <belanger@truman.edu> + + * calc.texi (Predefined Units): Use `alpha' for the fine structure + constant. + +2005-10-23 Michael Albinus <michael.albinus@gmx.de> + + * faq.texi (Bugs and problems): Replace + `dired-move-to-filename-regexp' by + `directory-listing-before-filename-regexp'. + +2005-10-22 Eli Zaretskii <eliz@gnu.org> + + * newsticker.texi (UPDATED): Set value. + +2005-10-17 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Document Groups): Remove duplicate item. + +2005-10-21 Juri Linkov <juri@jurta.org> + + * custom.texi (Examining): Mention accessing the old variable + value via M-n in set-variable. + +2005-10-21 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Summary): Mention iCalendar support. + (Exporting): Document iCalendar support. + +2005-10-18 Romain Francoise <romain@orebokech.com> + + * files.texi (Version Systems): Capitalize GNU. + + * viper.texi (Viper Specials): Likewise. + +2005-10-18 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Compilation Mode): Remove redundant paragraph. + (Watch Expressions): Remove paragraph to reflect code change. + +2005-10-17 Juri Linkov <juri@jurta.org> + + * info.texi (Getting Started, Search Index, Expert Info): + Fix wording. + (Search Text): Replace `echo area' with `mode line'. + (Search Index): Both `i' and `,' find all index entries. + Replace example `C-f' with `C-l' (which exists in index of Info + manual) and delete spaces in its keyboard input sequence. + Delete unnecessary explanations about literal characters. + +2005-10-16 Richard M. Stallman <rms@gnu.org> + + * building.texi (Compilation Mode, Compilation): Clarified. + +2005-10-15 Richard M. Stallman <rms@gnu.org> + + * misc.texi (Saving Emacs Sessions): Mention savehist library. + +2005-10-14 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Document Server Internals): Addition. + +2005-10-13 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (A note on namespaces): Fix RFC reference. + +2005-10-12 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (RSS): Fix key description. + +2005-10-11 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi: Emacs/w3 -> Emacs/W3. + (Browsing the Web): Fix description. + (Web Searches): Ditto. + (Customizing W3): Ditto. + +2005-10-07 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Maildir): Clarify expire-age and expire-group. + +2005-10-13 Kenichi Handa <handa@m17n.org> + + * basic.texi (Position Info): Fix previous change. + +2005-10-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * cmdargs.texi (Icons X): Fix typo. + +2005-10-12 Kenichi Handa <handa@m17n.org> + + * basic.texi (Position Info): Describe the case that Emacs shows + "part of display ...". + +2005-10-11 Jay Belanger <belanger@truman.edu> + + * calc.texi (Integration): Mention using `a i' to compute definite + integrals. + +2005-10-11 Juri Linkov <juri@jurta.org> + + * info.texi: Rearrange nodes. + (Top): Update menu. Change ref `Info for Experts' to + `Advanced Info Commands'. + (Getting Started): Fix description of manual's parts. + (Help-Int): Change xref `Info Search' to `Search Index', and + `Expert Info' to `Advanced'. + (Advanced): Move node one level up. + (Search Text, Search Index): New nodes split out from `Info Search'. + (Go to node, Choose menu subtopic, Create Info buffer): New nodes + split out from `Advanced'. + (Advanced, Emacs Info Variables): De-document editing an Info file + in Info. + (Emacs Info Variables): Move node from `Expert Info' to `Advanced'. + (Creating an Info File): Delete node and move its text to + `Expert Info'. + +2005-10-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * cmdargs.texi (Icons X): -nb => -nbi. + +2005-10-10 Chong Yidong <cyd@stupidchicken.com> + + * frames.texi (Speedbar): A couple more clarifications. + +2005-10-11 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (GDB User Interface Layout): Improve diagram. + (Watch Expressions): Explain how to make speedbar global. + (Other GDB User Interface Buffers): Make references more precise. + +2005-10-10 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Workflow states): Documented that change in keywords + becomes active only after restart of Emacs. + +2005-10-09 Richard M. Stallman <rms@gnu.org> + + * frames.texi (Speedbar): Clarify the text. + +2005-10-09 Chong Yidong <cyd@stupidchicken.com> + + * frames.texi (Speedbar): Add information on keybindings, + dismissing the speedbar, and buffer display mode. Link to + speedbar manual. + +2005-10-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * cmdargs.texi (Icons X): Removed options -i, -itype, --icon-type, + added -nb, --no-bitmap-icon. + +2005-10-08 Michael Albinus <michael.albinus@gmx.de> + + Sync with Tramp 2.0.51. + +2005-10-08 Nick Roberts <nickrob@snap.net.nz> + + * speedbar.texi (Introduction): Describe new location of speedbar + on menubar. + (Basic Key Bindings): Remove descriptions of bindings that have + been removed. + +2005-10-07 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (GDB Graphical Interface): Add variables and + functions to indices. Be more precise. + +2005-10-05 Nick Roberts <nickrob@snap.net.nz> + + * speedbar.texi (GDB): Describe use of watch expressions. + +2005-10-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * frames.texi (Drag and Drop): Remove the x- from + x-dnd-open-file-other-window and xdnd-protocol-alist. + +2005-09-30 Romain Francoise <romain@orebokech.com> + + * mini.texi (Minibuffer): The default value now appears before the + colon in minibuffer prompts. + +2005-09-28 Simon Josefsson <jas@extundo.com> + + * message.texi (IDNA): Fix. + +2005-09-28 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (NNTP): Remove nntp-buggy-select, nntp-read-timeout, + nntp-server-hook, and nntp-warn-about-losing-connection; fix + description of nntp-open-connection-function. + (Common Variables): Fix descriptions. + +2005-09-26 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Server Buffer Format): Document the %a format spec. + +2005-09-25 Richard M. Stallman <rms@gnu.org> + + * search.texi (Regexp Search): Doc search-whitespace-regexp. + +2005-09-22 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Mail): Fix gnus-confirm-mail-reply-to-news entry. + +2005-09-20 Emanuele Giaquinta <emanuele.giaquinta@gmail.com> (tiny change) + + * text.texi (Paragraphs): Correction about Paragraph-Indent Text mode. + +2005-09-23 Carsten Dominik <dominik@science.uva.nl> + + * org.texi Version 3.16. + +2005-09-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * emacs.texi (Top): Update submenus from macos.texi. + + * macos.texi: Change `Mac OS 8 or 9' to `Mac OS Classic'. + (Mac OS): Update feature support status. + (Mac Input): List supported input scripts. Remove description + about `mac-keyboard-text-encoding'. Mention mouse button + emulation and related variables. + (Mac International): Mention Central European and Cyrillic + support. Now `keyboard-coding-system' is dynamically changed. + Add description about coding system for selection. Add + description about language environment. + (Mac Environment Variables): Mention + `~/.MacOSX/environment.plist'. Give example of command line + arguments. Add Preferences support. + (Mac Directories): Explicitly state that this node is for Mac OS + Classic only. + (Mac Font Specs): Mention specification for scalable fonts. List + supported charsets. Add preferred way of creating fontsets. Add + description about `mac-allow-anti-aliasing'. + (Mac Functions): Add descriptions about `mac-set-file-creator', + `mac-get-file-creator', `mac-set-file-type', `mac-get-file-type', + and `mac-get-preference'. + +2005-09-19 Miles Bader <miles@gnu.org> + + * newsticker.texi: Get rid of CVS keywords. + +2005-09-15 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Finding the Parent): Fix description of how Gnus + finds article. + +2005-09-14 Jari Aalto <jari.aalto@cante.net> + + * gnus.texi (Advanced Scoring Examples): New examples to teach how + to drop off non-answered articles. + +2005-09-19 Juanma Barranquero <lekktu@gmail.com> + + * makefile.w32-in (newsticker.dvi): Use parentheses instead of curly + braces (which are unsupported by NMAKE) for macro `srcdir'. + +2005-09-17 Eli Zaretskii <eliz@gnu.org> + + * makefile.w32-in (INFO_TARGETS, DVI_TARGETS): Add newsticker targets. + (../info/newsticker, newsticker.dvi): New targets. + +2005-09-17 Ulf Jasper <ulf.jasper@web.de> + + * newsticker.texi: Replace @command with @code. Replace @example + with @lisp. + (Top): Added explanations to menu items. + (GNU Free Documentation License): Removed. + +2005-09-16 Romain Francoise <romain@orebokech.com> + + Update all files to specify GFDL version 1.2. + + * doclicense.texi (GNU Free Documentation License): Update to + version 1.2. + +2005-09-15 Richard M. Stallman <rms@gnu.org> + + * buffers.texi (List Buffers): Fix xref. + + * rmail.texi (Rmail Basics): Fix xref. + + * emacs.texi (Top): Update subnode menus. + + * files.texi (Saving Commands): New node, broken out of Saving. + (Customize Save): New node, broken out of Saving. + Clarify effect of write-region-inhibit-fsync. + (Misc File Ops): Say write-region-inhibit-fsync affects write-region. + + * newsticker.texi: Fix @setfilename. + + * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add newsticker targets. + (../info/newsticker, newsticker.dvi): New targets. + +2005-09-14 Romain Francoise <romain@orebokech.com> + + * files.texi (Saving): Mention write-region-inhibit-fsync. + +2005-09-05 Chong Yidong <cyd@stupidchicken.com> + + * custom.texi (Custom Themes): New node. + +2005-09-03 Richard M. Stallman <rms@gnu.org> + + * search.texi (Search Case): Mention vars that control + case-fold-search for various operations. + +2005-08-30 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Version 3.15. + +2005-08-29 Luc Teirlinck <teirllm@auburn.edu> + + * ses.texi: Combine all three indices into one. + Correct a few typos. + +2005-08-19 Katsumi Yamaoka <yamaoka@jpl.org> + + * emacs-mime.texi (time-date): Fix description of safe-date-to-time. + +2005-08-18 Katsumi Yamaoka <yamaoka@jpl.org> + + * emacs-mime.texi (Handles): Remove duplicate item. + (Encoding Customization): Fix the default value for + mm-coding-system-priorities. + (Charset Translation): Emacs doesn't use mm-mime-mule-charset-alist. + (Basic Functions): Fix reference. + +2005-08-09 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Charsets): Fj hierarchy uses iso-2022-jp. + +2005-08-22 Juri Linkov <juri@jurta.org> + + * display.texi (Standard Faces): Merge the text from + `(elisp)Standard Faces' into this node. + +2005-08-18 Luc Teirlinck <teirllm@auburn.edu> + + * emacs.texi (Top): Delete menu item for deleted node + Keyboard Translations. + +2005-08-18 Richard M. Stallman <rms@gnu.org> + + * faq.texi (Obtaining the FAQ): Delete refs to Lerner's email + and web site. + + * trouble.texi (Unasked-for Search): + Delete xref to Keyboard Translations. + + * glossary.texi (Glossary): Delete xref. + + * faq.texi (Swapping keys): Xref for normal-erase-is-backspace-mode, + not keyboard-translate. + + * custom.texi (Minor Modes): Say that the list here is not complete. + (Keyboard Translations): Node deleted. + (Disabling): Delete xref to it. + (Customization Groups): Fix Custom buffer example. + (Hooks): Mention remove-hooks. + +2005-08-17 Luc Teirlinck <teirllm@auburn.edu> + + * building.texi (GDB Graphical Interface): Improve filling of menu + item. + +2005-08-18 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (GDB Graphical Interface): Use better node names. + +2005-08-14 Richard M. Stallman <rms@gnu.org> + + * text.texi (Sentences): Fix xref. + +2005-08-14 Juri Linkov <juri@jurta.org> + + * building.texi (Compilation, Grep Searching): Move grep command + headings from `Compilation' to `Grep Searching'. + + * dired.texi (Dired and Find): + * maintaining.texi (Tags Search): Replace grep xref to + `Compilation' node with `Grep Searching'. + + * files.texi (Comparing Files): Replace xref to `Compilation' with + `Compilation Mode'. + +2005-08-13 Alan Mackenzie <acm@muc.de> + + * search.texi (Non-ASCII Isearch): Correct a typo. + (Replacement Commands): Mention query-replace key binding. + +2005-08-11 Richard M. Stallman <rms@gnu.org> + + * programs.texi (Options for Comments): Fix xref. + + * search.texi (Regexp Backslash, Regexp Example): New nodes split + out of Regexps. + + * faq.texi (Using regular expressions): Fix xref. + +2005-08-09 Juri Linkov <juri@jurta.org> + + * building.texi (Compilation): Use `itemx' instead of `item'. + (Grep Searching): Simplify phrase. + + * display.texi (Standard Faces): Describe vertical-border on + window systems. + + * windows.texi (Split Window): Simplify phrase and mention + vertical-border face. + +2005-08-09 Richard M. Stallman <rms@gnu.org> + + * files.texi (Comparing Files): Clarify compare-windows. + + * calendar.texi (Scroll Calendar): Document < and > in calendar. + +2005-08-09 Juri Linkov <juri@jurta.org> + + * info.texi (Help-P): Replace `Prev' with `Previous'. + (Help-M, Help-Xref): Add S-TAB. + (Help-FOO): Update `u' command. + (Help-Xref): Move info about Mouse-2 from `Help-Int'. + Update info about visibility of xref parts. + (Help-Int): Fix `m' command. Rename `Info-last' to + `Info-history-back'. Add `Info-history-forward'. + (Advanced): Fix `g*' and `M-n' commands. + (Info Search): Add `index-apropos' in stand-alone browser. + Add isearch commands. + (Emacs Info Variables): Remove `Info-fontify'. + Add `Info-mode-hook'. Update face names. + Add `Info-fontify-maximum-menu-size', + `Info-fontify-visited-nodes', `Info-isearch-search'. + +2005-08-07 Michael Albinus <michael.albinus@gmx.de> + + Sync with Tramp 2.0.50. + + * tramp.texi: Use @option{} consequently for method names. + (Inline methods, External transfer methods): Remove references to + Cygwin. + (Issues with Cygwin ssh): Explain trouble with Cygwin's ssh + implementation. + +2005-08-06 Eli Zaretskii <eliz@gnu.org> + + * mule.texi (Coding Systems): Rephrase the paragraph about + codepages: no need for "M-x codepage-setup" anymore, except on + MS-DOS. + + * msdog.texi (MS-DOS and MULE): Clarify that this section is for + the MS-DOS port only. + +2005-07-30 Eli Zaretskii <eliz@gnu.org> + + * makefile.w32-in (info): Don't run multi-install-info.bat. + ($(infodir)/dir): New target, produced by running + multi-install-info.bat. + +2005-07-27 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Startup Files): Fix name of gnus-site-init-file. + Mention that gnus-init-file is not read when Emacs is invoked with + --no-init-file or -q. + +2005-07-22 Eli Zaretskii <eliz@gnu.org> + + * files.texi (Quoted File Names): Add index entry. + +2005-07-19 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Version 3.14. + +2005-07-04 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Version 3.13. + +2005-07-19 Juri Linkov <juri@jurta.org> + + * files.texi (Comparing Files): Mention resync for `compare-windows'. + +2005-07-18 Juri Linkov <juri@jurta.org> + + * calc.texi (Time Zones, Logical Operations): + * cl.texi (Overview): + * custom.texi (Easy Customization): + * files.texi (Old Versions): + * frames.texi (Wheeled Mice): + * mule.texi (Specify Coding): + * org.texi (TODO types): + * sc.texi (Emacs 18 MUAs): + * speedbar.texi (Top): + * text.texi (Cell Justification): + * trouble.texi (After a Crash): + * url.texi (History): + * xresources.texi (GTK styles): + Delete duplicate duplicate words. + +2005-07-17 Richard M. Stallman <rms@gnu.org> + + * frames.texi (Creating Frames): Fix foreground color example. + + * custom.texi (Init Examples): Clean up text about conditionals. + +2005-07-16 Richard M. Stallman <rms@gnu.org> + + * mini.texi (Completion Commands): Fix command name for ?. + +2005-07-16 Johan Bockgard <bojohan@users.sourceforge.net> (tiny change) + + * cl.texi (Type Predicates): Document `atom' type. + +2005-07-16 Eli Zaretskii <eliz@gnu.org> + + * display.texi (Standard Faces): Explain that customization of + `menu' face has no effect on w32 and with GTK. Add + cross-references. + + * cmdargs.texi (General Variables): Clarify the default location + of $HOME on w32 systems. + +2005-07-15 Jason Rumney <jasonr@gnu.org> + + * cmdargs.texi (General Variables): Default HOME on MS Windows has + changed. + +2005-07-08 Kenichi Handa <handa@m17n.org> + + * mule.texi (Recognize Coding): Recommend + revert-buffer-with-coding-system instead of revert-buffer. + +2005-07-07 Richard M. Stallman <rms@gnu.org> + + * anti.texi (Antinews): Mention mode-line-inverse-video. + + * files.texi (Saving): Minor correction about C-x C-w. + + * display.texi (Display Custom): Don't mention mode-line-inverse-video. + +2005-07-07 Luc Teirlinck <teirllm@auburn.edu> + + * search.texi (Isearch Scroll): Add example of using the + `isearch-scroll' property. + (Slow Isearch): Reference anchor for `baud-rate' instead of entire + `Display Custom' node. + (Regexp Replace): Put text that requires Emacs Lisp knowledge last + and de-emphasize it. + (Other Repeating Search): `occur' currently can not correctly + handle multiline matches. Correct, clarify and update description + of `flush-lines' and `keep-lines'. + + * display.texi (Display Custom): Add anchor for `baud-rate'. + +2005-07-07 Richard M. Stallman <rms@gnu.org> + + * gnu.texi: Update where to get GNU status; add refs for how to help. + Add footnotes 6 and 7. + +2005-07-04 Lute Kamstra <lute@gnu.org> + + Update FSF's address in GPL notices. + + * calc.texi (Copying): + * doclicense.texi (GNU Free Documentation License): + * faq.texi (Contacting the FSF): + * mh-e.texi (Copying): + * trouble.texi (Checklist): Update FSF's address. + +2005-07-03 Richard M. Stallman <rms@gnu.org> + + * flymake.texi (Example -- Configuring a tool called directly): + Update name of flymake-build-relative-filename. + +2005-06-29 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (NoCeM): gnus-nocem-verifyer defaults to pgg-verify. + +2005-06-29 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Version 3.12. + +2005-06-24 Richard M. Stallman <rms@gnu.org> + + * display.texi (Text Display): Change index entries. + +2005-06-24 Eli Zaretskii <eliz@gnu.org> + + * makefile.w32-in (MAKEINFO): Use --force. + (INFO_TARGETS, DVI_TARGETS): Make identical to the lists in + Makefile.in. + (gnus.dvi): Use "..." to quote Sed args, so that it works with + more shells. + +2005-06-23 Richard M. Stallman <rms@gnu.org> + + * anti.texi (Antinews): Renamed show-nonbreak-escape to + nobreak-char-display. + + * emacs.texi (Top): Update detailed node listing. + + * display.texi (Text Display): Renamed show-nonbreak-escape + to nobreak-char-display and no-break-space to nobreak-space. + (Standard Faces): Split up the list of standard faces + and put it in a separate node. Add nobreak-space and + escape-glyph. + + * speedbar.texi (Creating a display): Texinfo usage fixes. + + * tramp.texi (Customizing Completion, Auto-save and Backup): + Texinfo usage fixes. + +2005-06-23 Lute Kamstra <lute@gnu.org> + + * mule.texi (Select Input Method): Fix typo. + +2005-06-23 Kenichi Handa <handa@m17n.org> + + * mule.texi (International): List all supported scripts. Adjust + text for that leim is now included in the normal Emacs + distribution. + (Language Environments): List all language environments. + Intlfonts contains fonts for most supported scripts, not all.. + (Select Input Method): Refer to C-u C-x = to see how to type to + input a specifc character. + (Recognize Coding): Fix typo, china-iso-8bit -> chinese-iso-8bit. + +2005-06-23 Juanma Barranquero <lekktu@gmail.com> + + * building.texi (Grep Searching): + * dired-x.texi (Miscellaneous Commands): + * ediff.texi (Miscellaneous): + * gnus.texi (MIME Commands, Fancy Mail Splitting, Agent Visuals) + (Agent Variables): + * info.texi (Help-Xref): + * message.texi (Message Headers): + * org.texi (Remember): + * reftex.texi (Options (Defining Label Environments)): + (Options (Index Support)): + (Options (Viewing Cross-References)): + (Options (Misc)): + (Changes): + * speedbar.texi (Creating a display): + * tramp.texi (Customizing Completion, Auto-save and Backup): + Texinfo usage fix. + +2005-06-22 Miles Bader <miles@gnu.org> + + * display.texi (Faces): Change `vertical-divider' to `vertical-border'. + +2005-06-20 Miles Bader <miles@gnu.org> + + * display.texi (Faces): Add `vertical-divider'. + +2005-06-17 Richard M. Stallman <rms@gnu.org> + + * text.texi (Adaptive Fill): Minor clarification. + +2005-06-13 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Version 3.11. + +2005-06-12 Jay Belanger <belanger@truman.edu> + + * calc.texi (Getting Started): Remove extra menu item. + +2005-06-10 Lute Kamstra <lute@gnu.org> + + * emacs.texi (Top): Correct version number. + * anti.texi (Antinews): Correct version number. Use EMACSVER to + refer to the current version of Emacs. + +2005-06-08 Luc Teirlinck <teirllm@auburn.edu> + + * files.texi (Log Buffer): Document when there can be more than + one file to be committed. + +2005-06-08 Juri Linkov <juri@jurta.org> + + * display.texi (Faces): Add `shadow' face. + +2005-06-07 Masatake YAMATO <jet@gyve.org> + + * display.texi (Faces): Write about mode-line-highlight. + +2005-06-06 Richard M. Stallman <rms@gnu.org> + + * misc.texi (Printing Package): Explain how to initialize + printing package. + + * cmdargs.texi (Action Arguments): Clarify directory default for -l. + +2005-06-05 Chong Yidong <cyd@stupidchicken.com> + + * emacs.texi: Rename Hardcopy to Printing. + Make PostScript and PostScript Variables subnodes of it. + + * misc.texi (Printing): Rename node from Hardcopy. + Mention menu bar options. + Move PostScript and PostScript Variables to submenu. + (Printing package): New node. + + * mark.texi (Using Region): Change Hardcopy xref to Printing. + + * dired.texi (Operating on Files): Likewise. + + * calendar.texi (Displaying the Diary): Likewise. + + * msdog.texi (MS-DOS Printing, MS-DOS Processes): Likewise. + + * glossary.texi (Glossary): Likewise. + + * frames.texi (Mode Line Mouse): Mention mode-line-highlight + effect. + +2005-06-04 Richard M. Stallman <rms@gnu.org> + + * trouble.texi (After a Crash): Polish previous change. + +2005-05-31 Jay Belanger <belanger@truman.edu> + + * calc.texi (Notations Used in This Manual): Use @kbd for key + sequence. + (Demonstration of Calc): Mention another way of starting Calc. + (Starting Calc): Mention long name of M-#. + (Embedded Mode Overview): Remove unnecessary instruction. + (Other M-# commands): Rephrase `M-# 0' explanation. + (Basic Embedded Mode): Rewrite discussion of prefix arguments to + reflect current behavior. + +2005-05-30 Jay Belanger <belanger@truman.edu> + + * calc.texi (Hooks): Change description of calc-window-hook and + calc-trail-window-hook to match usage. + (Computational Functions): Add more constant-generating functions. + (Customizable Variables): Use defvar. + +2005-05-30 Noah Friedman <friedman@splode.com> + + * trouble.texi (After a Crash): Mention emacs-buffer.gdb as a + recovery mechanism. + +2005-05-28 Jay Belanger <belanger@truman.edu> + + * calc.texi (Assignments in Embedded Mode): Fix variable name. + (Basic Embedded Mode): Explain behavior of arguments to + calc-embedded-mode. + +2005-05-28 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Other Buffers): SPC toggles display of + floating point registers. + +2005-05-27 Jay Belanger <belanger@truman.edu> + + * calc.texi (Queries in Keyboard Macros): Rewrite to reflect + current behavior. + +2005-05-27 Nick Roberts <nickrob@snap.net.nz> + + * files.texi (Log Buffer): Merge in description of Log Edit + mode from pcl-cvs.texi. + +2005-05-26 Richard M. Stallman <rms@gnu.org> + + * building.texi (Lisp Eval): C-M-x with arg runs Edebug. + +2005-05-25 Jay Belanger <belanger@truman.edu> + + * calc.texi: Change Calc version number throughout. + (Keypad Mode): Change location in info output. + (Keypad mode overview): Move picture of keypad. + +2005-05-24 Luc Teirlinck <teirllm@auburn.edu> + + * fixit.texi (Spelling): Delete confusing sentence; flyspell is + not enabled by default. + When not on a word, `ispell-word' by default checks the word + before point. + +2005-05-24 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Debugger Operation): Simplify last sentence. + +2005-05-23 Lute Kamstra <lute@gnu.org> + + * emacs.texi: Update FSF's address throughout. + (Preface): Use @cite. + (Distrib): Add cross reference to the node "Copying". Mention the + FDL. Don't refer to etc/{FTP,ORDERS}. Mention the sale of + printed manuals. + (Intro): Use @xref for the Emacs Lisp Intro. + +2005-05-21 Jay Belanger <belanger@truman.edu> + + * calc.texi (Storing variables): Mention that only most variables + are void to begin with. + +2005-05-21 Kevin Ryde <user42@zip.com.au> + + * widget.texi (Basic Types): Update cross ref from "Enabling + Mouse-1 to Follow Links" to "Links and Mouse-1" per recent + lispref/text.texi change. + +2005-05-20 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Version 3.09. + +2005-05-18 Carsten Dominik <dominik@science.uva.nl> + + * reftex.texi: Version 4.28. + +2005-05-18 Luc Teirlinck <teirllm@auburn.edu> + + * buffers.texi (Select Buffer): Document `C-u M-g M-g'. + + * basic.texi (Moving Point): Mention default for `goto-line'. + + * programs.texi (Lisp Doc): Eldoc mode shows only the first line + of a variable's docstring. + +2005-05-18 Lute Kamstra <lute@gnu.org> + + * maintaining.texi (Overview of Emerge): Add cross reference. + Remove duplication. + + * emacs.texi (Top): Update to the current structure of the manual. + * misc.texi (Emacs Server): Add menu description. + * files.texi (Saving): Fix menu. + * custom.texi (Customization): Fix menu. + * mule.texi (International): Fix menu. + * kmacro.texi (Keyboard Macros): Fix menu. + +2005-05-16 Luc Teirlinck <teirllm@auburn.edu> + + * display.texi: Various minor changes. + (Faces): Delete text that is repeated in the next section. + +2005-05-16 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Debugger Operation): Mention GUD tooltips are + disabled with GDB in text command mode. + +2005-05-16 Jay Belanger <belanger@truman.edu> + + * calc.texi (Storing Variables): Mention `calc-copy-special-constant'. + +2005-05-16 Nick Roberts <nickrob@snap.net.nz> + + * building.texi: Replace toolbar with "tool bar" for consistency. + (Compilation Mode): Describe compilation-context-lines + and use of arrow in compilation buffer. + (Debugger Operation): Replace help text with variable's value. + + * frames.texi (Tooltips): Replace toolbar with "tool bar" for + consistency. + +2005-05-15 Luc Teirlinck <teirllm@auburn.edu> + + * major.texi (Choosing Modes): normal-mode processes the -*- line. + Add xref. + +2005-05-14 Jay Belanger <belanger@truman.edu> + + * calc.texi (Default Simplifications): Insert missing ! (logical + not operator). + +2005-05-14 Michael Albinus <michael.albinus@gmx.de> + + Sync with Tramp 2.0.49. + +2005-05-14 Luc Teirlinck <teirllm@auburn.edu> + + * basic.texi (Moving Point): Mention `M-g g' binding for `goto-line'. + (Position Info): Delete discussion of `goto-line'. It is already + described in `Moving point'. + + * mini.texi (Completion Commands): Correct reference. + (Completion Options): Fix typo. + + * killing.texi (Deletion): Complete description of `C-x C-o'. + +2005-05-10 Jay Belanger <belanger@truman.edu> + + * calc.texi (Default Simplifications): Mention that 0^0 simplifies + to 1. + +2005-05-10 Richard M. Stallman <rms@gnu.org> + + * building.texi (Compilation): Clarify recompile's directory choice. + + * frames.texi (Tooltips): Cleanups. + + * basic.texi (Arguments): Fix punctuation. + +2005-05-09 Luc Teirlinck <teirllm@auburn.edu> + + * screen.texi (Menu Bar): The up and down (not left and right) + arrow keys move through a keyboard menu. + +2005-05-08 Luc Teirlinck <teirllm@auburn.edu> + + * basic.texi: Various typo and grammar fixes. + (Moving Point): C-a now runs move-beginning-of-line. + +2005-05-08 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Debugger Operation): Describe gud-tooltip-echo-area. + + * frames.texi (Tooltips): Describe help tooltips and GUD tooltips + as different animals. + +2005-05-07 Luc Teirlinck <teirllm@auburn.edu> + + * frames.texi (Mouse References): Clarify `mouse-1-click-follows-link'. + Correct index entry. + +2005-05-07 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Debugger Operation): Update to reflect changes + in GUD tooltips. + +2005-04-30 Richard M. Stallman <rms@gnu.org> + + * files.texi (Compressed Files): Auto Compression normally enabled. + + * building.texi (Debugger Operation): Clarify previous change. + +2005-04-29 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Version 3.08, structure reorganized. + +2005-04-28 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Debugger Operation): Add description for + GUD tooltips when program is not running. + +2005-04-26 Luc Teirlinck <teirllm@auburn.edu> + + * misc.texi (Shell): Add `Shell Prompts' to menu. + (Shell Mode): Add xref to `Shell Prompts'. Clarify `C-c C-u' + description. Delete remarks moved to new node. + (Shell Prompts): New node. + (History References): Replace remarks moved to `Shell Prompts' + with xref to that node. + (Remote Host): Clarify how to specify the terminal type when + logging in to a different machine. + +2005-04-26 Richard M. Stallman <rms@gnu.org> + + * emacs.texi (Top): Update submenus from files.texi. + + * files.texi (Filesets): Clarify previous change. + + * dired.texi (Misc Dired Features): Clarify previous change. + +2005-04-25 Chong Yidong <cyd@stupidchicken.com> + + * ack.texi (Acknowledgments): Delete info about iso-acc.el. + + * dired.texi (Misc Dired Features): Document + dired-compare-directories. + + * files.texi (Filesets): New node. + (File Conveniences): Document Image mode. + + * text.texi (TeX Print): Document tex-compile. + +2005-04-25 Luc Teirlinck <teirllm@auburn.edu> + + * frames.texi (Tooltips): Tooltip mode is enabled by default. + Delete redundant reference to tooltip Custom group. It is + referred too again in the next paragraph. + +2005-04-24 Richard M. Stallman <rms@gnu.org> + + * ack.texi: Delete info about lazy-lock.el and fast-lock.el. + + * faq.texi: Delete info about lazy-lock.el and fast-lock.el. + +2005-04-19 Kim F. Storm <storm@cua.dk> + + * building.texi (Compilation Mode): Add M-g M-n and M-g M-p bindings. + +2005-04-18 Lars Hansen <larsh@math.ku.dk> + + * misc.texi (Saving Emacs Sessions): Add that "--no-desktop" now + turns off desktop-save-mode. + +2005-04-17 Luc Teirlinck <teirllm@auburn.edu> + + * frames.texi (XTerm Mouse): Xterm Mouse mode is no longer enabled + by default in terminals compatible with xterm. Mention that + xterm-mouse-mode is a minor mode and put in pxref to Minor Modes + node. + +2005-04-15 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Update to version 3.06. + +2005-04-13 Lute Kamstra <lute@gnu.org> + + * cc-mode.texi: Prevent creating an unnecessary empty cc-mode.ss file. + +2005-04-12 Luc Teirlinck <teirllm@auburn.edu> + + * frames.texi (XTerm Mouse): Xterm Mouse mode is now enabled by default. + +2005-04-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * xresources.texi (Table of Resources): Add cursorBlink. + +2005-04-11 Luc Teirlinck <teirllm@auburn.edu> + + * rmail.texi (Rmail Summary Edit): Explain numeric arguments to + `d', `C-d' and `u'. + +2005-04-11 Richard M. Stallman <rms@gnu.org> + + * cmdargs.texi (Initial Options): -Q is now --quick, and does less. + (Misc X): Add -D, --basic-display. + + * maintaining.texi (Change Log): Correct the description of + the example. + + * major.texi (Choosing Modes): Document magic-mode-alist. + +2005-04-10 Thien-Thi Nguyen <ttn@gnu.org> + + * cl.texi (Porting Common Lisp): Fix typo. + +2005-04-10 Luc Teirlinck <teirllm@auburn.edu> + + * rmail.texi (Rmail Basics): Clarify description of `q' and `b'. + (Rmail Deletion): `C-d' in RMAIL buffer does not accept a numeric arg. + (Rmail Inbox): Give full name of `rmail-primary-inbox-list'. + (Rmail Output): Clarify which statements apply to `o', `C-o' and + `w', respectively. + (Rmail Labels): Mention `l'. + (Rmail Attributes): Correct pxref. Mention `stored' attribute. + (Rmail Summary Edit): Describe `j' and RET. + +2005-04-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * xresources.texi (Lucid Resources): Add fontSet resource. + +2005-04-06 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (RSS): Addition. + +2005-04-09 Luc Teirlinck <teirllm@auburn.edu> + + * display.texi (Useless Whitespace): `indicate-unused-lines' is + now called `indicate-empty-lines'. + +2005-04-06 Kim F. Storm <storm@cua.dk> + + * cmdargs.texi (Initial Options): Add --bare-bones alias for -Q. + +2005-04-04 Luc Teirlinck <teirllm@auburn.edu> + + * dired.texi (Dired Visiting): `dired-view-command-alist' has been + deleted. + (Marks vs Flags): Add some convenient key bindings. + (Hiding Subdirectories): Delete redundant and inaccurate sentence. + (Misc Dired Features): Correct and expand description of `w' command. + + * frames.texi (XTerm Mouse): Delete apparently false info. + The GNU/Linux console currently does not appear to support + `xterm-mouse-mode'. + +2005-04-04 Jay Belanger <belanger@truman.edu> + + * calc.texi: Change Calc version number. + (Customizable variables): Fix description of calc-language-alist. + (Copying): Put in version 2 of GPL. + +2005-04-03 Glenn Morris <gmorris@ast.cam.ac.uk> + + * calendar.texi (Diary): Mention shell utility `calendar'. + +2005-04-01 Richard M. Stallman <rms@gnu.org> + + * cmdargs.texi (Misc X): Explain horizontal scroll bars don't exist. + +2005-04-01 Jay Belanger <belanger@truman.edu> + + * calc.texi (Troubleshooting Commands): Remove comment about + installation. + (Installation): Remove section. + (Customizable Variables): New section. + (Basic Embedded Mode, Customizing Embedded Mode, Graphics) + (Graphical Devices): Add references to Customizable Variables. + +2005-04-01 Lute Kamstra <lute@gnu.org> + + * maintaining.texi (Change Log): add-change-log-entry uses + add-log-mailing-address. + +2005-03-31 Luc Teirlinck <teirllm@auburn.edu> + + * files.texi (Reverting): Move `auto-revert-check-vc-info' to + `VC Mode Line' and put in an xref to that node. + (VC Mode Line): Move `auto-revert-check-vc-info' here and clarify + its description. + +2005-03-31 Paul Eggert <eggert@cs.ucla.edu> + + * calendar.texi (Calendar Systems): Say that the Persian calendar + implemented here is the arithmetical one championed by Birashk. + +2005-03-30 Glenn Morris <gmorris@ast.cam.ac.uk> + + * programs.texi (Fortran Motion): Fix previous change. + +2005-03-25 Katsumi Yamaoka <yamaoka@jpl.org> + + * emacs-mime.texi (Display Customization): Markup fixes. + (rfc2047): Update. + +2005-03-23 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus-faq.texi: Replaced with auto-generated version. + +2005-03-29 Richard M. Stallman <rms@gnu.org> + + * mule.texi (Single-Byte Character Support): Reinstall the C-x 8 info. + +2005-03-29 Chong Yidong <cyd@stupidchicken.com> + + * text.texi (Refill): Refer to Long Lines Mode. + (Longlines): New node. + (Auto Fill): Don't index "word wrap" here. + (Filling): Add Longlines to menu. + +2005-03-29 Richard M. Stallman <rms@gnu.org> + + * xresources.texi: Minor fixes. + + * misc.texi (Emacs Server): Fix Texinfo usage. + + * emacs.texi (Top): Don't use a real section heading for + "Detailed Node Listing". Fake it instead. + + * basic.texi (Position Info): Minor cleanup. + + * mule.texi (Input Methods): Minor cleanup. + +2005-03-29 Glenn Morris <gmorris@ast.cam.ac.uk> + + * programs.texi (ForIndent Vars): `fortran-if-indent' does other + constructs as well. + (Fortran Motion): Add fortran-end-of-block, fortran-beginning-of-block. + +2005-03-29 Kenichi Handa <handa@m17n.org> + + * mule.texi (Input Methods): Refer to the command C-u C-x =. + + * basic.texi (Position Info): Update the description about the + command C-u C-x =. + +2005-03-28 Richard M. Stallman <rms@gnu.org> + + * emacs.texi (Top): Use @section for the detailed node listing. + + * calendar.texi: Minor fixes to previous change. + + * programs.texi (Fortran): Small fixes to previous changes. + + * emacs.texi (Top): Update list of subnodes of Dired. + Likewise for building.texi. + + * files.texi (File Conveniences): Delete Auto Image File mode. + +2005-03-28 Chong Yidong <cyd@stupidchicken.com> + + * building.texi (Flymake): New node. + + * custom.texi (Function Keys): Document kp- event types and + keypad-setup package. + + * dired.texi (Wdired): New node. + + * files.texi (File Conveniences): Reorder entries. + Explain how to turn on Auto-image-file mode. + Document Thumbs mode. + + * mule.texi (Specify Coding): Document recode-region and + recode-file-name. + + * programs.texi (Program Modes): Add Conf mode and DNS mode. + +2005-03-27 Luc Teirlinck <teirllm@auburn.edu> + + * commands.texi (Keys): M-o is now a prefix key. + +2005-03-27 Glenn Morris <gmorris@ast.cam.ac.uk> + + * programs.texi: Reformat and update copyright years. + (Fortran): Update section. + +2005-03-26 Luc Teirlinck <teirllm@auburn.edu> + + * files.texi: Several small changes in addition to: + (Visiting): Change xref for Dialog Boxes to ref. + (Version Headers): Replace references to obsolete var + `vc-header-alist' with `vc-BACKEND-header'. + (Customizing VC): Update value of `vc-handled-backends'. + +2005-03-26 Glenn Morris <gmorris@ast.cam.ac.uk> + + * emacs-xtra.texi (Advanced Calendar/Diary Usage): New section; + move here from Emacs Lisp Reference Manual. + * calendar.texi (Calendar/Diary, Diary Commands) + (Special Diary Entries, Importing Diary): Change some xrefs to + point to emacs-xtra rather than elisp. + + * emacs-xtra.texi (Calendar Customizing): + Move view-diary-entries-initially, view-calendar-holidays-initially, + mark-diary-entries-in-calendar, mark-holidays-in-calendar to main + Emacs Manual. + (Appt Customizing): Merge entire section into main Emacs Manual. + * calendar.texi (Holidays): Move view-calendar-holidays-initially, + mark-holidays-in-calendar here from emacs-xtra. + (Displaying the Diary): Move view-diary-entries-initially, + mark-diary-entries-in-calendar here from emacs-xtra. + (Appointments): Move appt-display-mode-line, + appt-display-duration, appt-disp-window-function, + appt-delete-window-function here from emacs-xtra. + + * calendar.texi: Update and reformat copyright. + Change all @xrefs to the non-printing emacs-xtra to @inforefs. + (Calendar/Diary): Menu now only on Mouse-3, not C-Mouse-3. + (Diary): Refer to `diary-file' rather than ~/diary. + (Diary Commands): Rename node to "Displaying the Diary". + * emacs.texi (Top): Rename "Diary Commands" section. + * misc.texi (Hardcopy): Rename "Diary Commands" xref. + +2005-03-26 Eli Zaretskii <eliz@gnu.org> + + * misc.texi (Emacs Server): Fix the command for setting + server-name. Add an xref to Invoking emacsclient. + + * help.texi (Help Summary): Clarify when "C-h ." will do something + nontrivial. + (Apropos): Add cindex entry for apropos-sort-by-scores. + + * display.texi (Text Display): Add index entries for how no-break + characters are displayed. + +2005-03-26 Stephan Stahl <stahl@eos.franken.de> (tiny change) + + * dired-x.texi (Multiple Dired Directories): default-directory was + renamed to dired-default-directory. + +2005-03-26 Eli Zaretskii <eliz@gnu.org> + + * files.texi (Visiting): Fix cross-references introduced with the + last change. + + * xresources.texi (GTK resources): Fix last change. + +2005-03-26 Jay Belanger <belanger@truman.edu> + + * calc.texi (Simplifying Formulas, Rewrite Rules): + Change description of top and bottom of fraction. + (Modulo Forms): Move description of how to create modulo forms to + earlier in the section. + (Fraction Mode): Suggest using : to get a fraction by dividing. + (Basic Arithmetic): Adjust placement of command name. + (Truncating the Stack): Emphasize that "hidden" entries are still + visible. + (Installation): Move discussion of printing manual to "About This + Manual". + (About This Manual): Mention how to print the manual. + (Reporting Bugs): Remove first person. + (Building Vectors): Add algebraic version of append. + (Manipulating Vectors): Fix algebraic version of calc-reverse-vector. + (Grouping Digits): Fix typo. + +2005-03-25 Chong Yidong <cyd@stupidchicken.com> + + * xresources.texi (X Resources): GTK options documented too. + (Resources): Clarify meaning of program name. + (Table of Resources): Add visualClass. + (GTK resources): Rewrite. + (GTK widget names, GTK Names in Emacs, GTK styles): Cleanups. + + * display.texi (Text Display): Mention non-breaking spaces. + + * files.texi (Reverting): Document auto-revert-check-vc-info. + + * frames.texi (Mouse Commands): Document + x-mouse-click-focus-ignore-position and mouse-drag-copy-region. + + * help.texi (Help Summary): Add `C-h .'. + (Apropos): Apropos accepts a list of search terms. + Document apropos-sort-by-scores. + (Help Echo): Document display-local-help. + + * misc.texi (Emacs Server): Document server-name. + (Invoking emacsclient): Document -s option for server names. + + * text.texi (Outline Visibility): Introduce "current heading + line" (commands can be called with point on a body line). + Re-order table to follow the sequence of discussion. + hide-body won't hide lines before first header line. + (TeX Mode): Add DocTeX mode. + +2005-03-25 Werner Lemberg <wl@gnu.org> + + * calc.texi, cl.texi, gnus.texi, idlwave.texi, reftex.texi: + Replace `legal' with `valid'. + +2005-03-25 Werner Lemberg <wl@gnu.org> + + * calc.texi, reftex.texi: Replace `illegal' with `invalid'. + +2005-03-24 Jay Belanger <belanger@truman.edu> + + * calc.texi (General Mode Commands) + (Mode Settings in Embedded Mode): Add some explanation of + recording mode settings. + +2005-03-24 Richard M. Stallman <rms@gnu.org> + + * mule.texi (Single-Byte Character Support): Delete mention + of iso-acc.el and iso-transl.el. + + * calc.texi: Remove praise of non-free software. + + * idlwave.texi: Don't say where to get IDL or its non-free manual. + (Installation): Node deleted. + +2005-03-23 Lute Kamstra <lute@gnu.org> + + * search.texi (Non-ASCII Isearch): Rename from Non-Ascii Isearch. + +2005-03-23 Richard M. Stallman <rms@gnu.org> + + * url.texi (HTTP language/coding): Improve last change. + + * search.texi: Delete explicit node pointers. + (Incremental Search): New menu. + (Basic Isearch, Repeat Isearch, Error in Isearch) + (Non-Ascii Isearch, Isearch Yank, Highlight Isearch, Isearch Scroll) + (Slow Isearch): New subnodes. + (Configuring Scrolling): Node deleted. + (Search Case): Doc default-case-fold-search. + (Regexp Replace): Move replace-regexp doc here. + + * rmail.texi (Movemail): Put commas inside closequotes. + + * picture.texi (Insert in Picture): Document C-c arrow combos. + (Basic Picture): Clarify erasure. + + * display.texi (Font Lock): Put commas inside closequotes. + + * cmdargs.texi (General Variables): Put commas inside closequotes. + +2005-03-23 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Stack Buffer): Mention reverse contrast for + *selected* frame (might not be current frame). + +2005-03-22 Jay Belanger <belanger@truman.edu> + + * calc.texi (Embedded Mode): Add new information on changing + modes. + +2005-03-21 Richard M. Stallman <rms@gnu.org> + + * building.texi (Starting GUD): Add bashdb. + +2005-03-20 Chong Yidong <cyd@stupidchicken.com> + + * basic.texi (Moving Point): Add M-g M-g binding. + (Undo): Document undo-only. + (Position Info): Document M-g M-g and C-u M-g M-g. + + * building.texi (Building): Put Grep Searching after Compilation + Shell. + (Compilation Mode): Document M-n, M-p, M-}, M-{, and C-c C-f bindings. + Document next-error-highlight. + (Grep Searching): Document grep-highlight-matches. + (Lisp Eval): Typing C-x C-e twice prints integers specially. + + * calendar.texi (Importing Diary): Rename node from iCalendar. + Document diary-from-outlook. + + * dired.texi (Misc Dired Features): Rename node from Misc Dired + Commands. + Mention effect of X drag and drop on Dired buffers. + + * files.texi (Visiting): Document large-file-warning-threshold. + Move paragraph on file-selection dialog. + Mention visiting files using X drag and drop. + (Reverting): Mention using Auto-Revert mode to tail files. + Document auto-revert-tail-mode. + (Version Systems): Minor correction. + (Comparing Files): Diff-mode is no longer based on Compilation + mode. + Document compare-ignore-whitespace. + (Misc File Ops): Explain passing a directory to rename-file. + Likewise for copy-file and make-symbolic-link. + + * frames.texi (Wheeled Mice): Mouse wheel support on by default. + Document mouse-wheel-progressive speed. + + * help.texi (Misc Help): Document numeric argument for C-h i. + Correctly explain the effect of just C-u as argument. + + * killing.texi (Deletion): Document numeric argument for + just-one-space. + + * mini.texi (Completion): Completion acts on text before point. + + * misc.texi (Saving Emacs Sessions): Document desktop-restore-eager. + (Emulation): CUA mode replaces pc-bindings-mode, + pc-selection-mode, and s-region. + + * mule.texi (Input Methods): Leim is now built-in. + (Select Input Method): Document quail-show-key. + (Specify Coding): Document revert-buffer-with-coding-system. + + * programs.texi (Fortran Motion): Document f90-next-statement, + f90-previous-statement, f90-next-block, f90-previous-block, + f90-end-of-block, and f90-beginning-of-block. + + * text.texi (Format Faces): Replace old M-g key prefix with M-o. + + * emacs.texi (Acknowledgments): Updated. + + * anti.texi: Total rewrite. + +2005-03-20 Michael Albinus <michael.albinus@gmx.de> + + Sync with Tramp 2.0.48. + + * trampver.texi.in: Replace "Emacs" by "GNU Emacs". + + * tramp.texi: Replace "Emacs" by "GNU Emacs". Replace "Linux" by + "GNU/Linux". Change all addresses to .gnu.org. + (Default Method): Offer shortened syntax for "su" and "sudo" + methods. + +2005-03-19 Chong Yidong <cyd@stupidchicken.com> + + * ack.texi (Acknowledgments): Update. + +2005-03-19 Eli Zaretskii <eliz@gnu.org> + + * anti.texi (Antinews): Refer to Emacs 21.4, not 21.3. Update + copyright years. + +2005-03-14 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Commands of GUD): Move paragraph on setting + breakpoints with mouse to the GDB Graphical Interface node. + +2005-03-07 Richard M. Stallman <rms@gnu.org> + + * url.texi: Fix usage of "e.g.". + (HTTP language/coding): Explain the rules for these strings. + + * misc.texi (Single Shell, Shell Options): Fix previous change. + + * building.texi (Debugger Operation): Update GUD tooltip enable info. + +2005-03-06 Richard M. Stallman <rms@gnu.org> + + * building.texi (Starting GUD): Don't explain text vs graphical + GDB here. Just mention it and xref. + Delete "just one debugger process". + (Debugger Operation): Move GUD tooltip info here. + (GUD Tooltips): Node deleted. + (GDB Graphical Interface): Explain the two GDB modes here. + + * woman.texi (Introduction): Minor cleanups. + + * url.texi (HTTP language/coding): Get rid of "Emacs 21". + + * sending.texi (Sending Mail): Minor cleanup. + (Mail Aliases): Explain quoting conventions. + Update key rebinding example. + (Header Editing): C-M-i is like M-TAB. + (Mail Mode Misc): mail-attach-file does not do MIME. + + * rmail.texi (Rmail Inbox): Move text from Remote Mailboxes + that really belongs here. + (Remote Mailboxes): Text moved to Rmail Inbox. + (Rmail Display): Mention Mouse-1. + (Movemail): Clarify two movemail versions. + Clarify rmail-movemail-program. + + * pcl-cvs.texi (About PCL-CVS): Get rid of "Emacs 21". + (Installation): Node deleted. + + * misc.texi (Single Shell): Replace uudecode example with gpg example. + Document async shell commands. + (Shell History): Clarify. + (Shell Ring): Mention C-UP an C-DOWN. + (Shell Options): Add comint-prompt-read-only. + (Invoking emacsclient): Set EDITOR to run Emacs. + (Sorting): No need to explain what region is. + (Saving Emacs Sessions): Fix typo. + (Recursive Edit): Fix punctuation. + (Emulation): Don't mention "PC bindings" which are standard. + (Hyperlinking): Explain Mouse-1 convention here. + (Find Func): Node deleted. + + * mh-e.texi (Preface): Get rid of "Emacs 21". + + * help.texi (Name Help): Xref to Hyperlinking. + + * glossary.texi (Glossary): + Rename "Balance Parentheses" to "Balancing...". + Add "Byte Compilation". Correct "Copyleft". + New xref in "Customization". + Clarify "Current Line", "Echoing", "Fringe", "Frame", "Speedbar". + Add "Graphical Terminal" "Keybinding", "Margin", "Window System". + Rename "Registers" to "Register". + Replace "Selecting" with "Selected Frame", + "Selected Window", and "Selecting a Buffer". + + * files.texi (Types of Log File): Explain how projects' + methods can vary. + + * eshell.texi (Installation): Delete node (for Emacs 20). + + * display.texi (Faces): Delete "Emacs 21". + + * custom.texi (Changing a Variable): C-M-i like M-TAB. + * fixit.texi (Spelling): C-M-i like M-TAB. + * mini.texi (Completion Options): C-M-i like M-TAB. + * programs.texi (Symbol Completion): C-M-i like M-TAB. + * text.texi (Text Mode): C-M-i like M-TAB. + + * commands.texi (Keys): Mention F1 and F2 in list of prefixes. + + * calendar.texi (Specified Dates): Mention `g w'. + (Appointments): appt-activate toggles with no arg. + +2005-03-05 Thien-Thi Nguyen <ttn@gnu.org> + + * flymake.texi: Refill and tweak style in @lisp blocks. + +2005-03-05 Juri Linkov <juri@jurta.org> + + * cmdargs.texi (Emacs Invocation): Add cindex + "invocation (command line arguments)" + (Misc X): Add -nbc, --no-blinking-cursor. + +2005-03-04 Ulf Jasper <ulf.jasper@web.de> + + * calendar.texi (iCalendar): No need to require it now. + +2005-03-03 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Slow/Expensive Connection): Don't abbreviate "very". + +2005-03-03 Nick Roberts <nickrob@snap.net.nz> + + * trouble.texi (Contributing): Mention Savannah. Direct users to + emacs-devel. + +2005-03-01 Glenn Morris <gmorris@ast.cam.ac.uk> + + * calendar.texi (Adding to Diary): Mention redrawing of calendar + window. + +2005-03-01 Jay Belanger <belanger@truman.edu> + + * calc.texi (Trigonometric and Hyperbolic Functions): + Mention additional functions. + (Algebraic Simplifications): Mention additional simplifications. + +2005-02-27 Richard M. Stallman <rms@gnu.org> + + * building.texi (Compilation): Update mode line status info. + +2005-02-27 Matt Hodges <MPHodges@member.fsf.org> + + * calendar.texi (General Calendar): Document binding of + scroll-other-window-down. + (Mayan Calendar): Fix earliest date. + (Time Intervals): Document timeclock-change. + Fix timeclock-ask-before-exiting documentation. + +2005-02-26 Kim F. Storm <storm@cua.dk> + + * frames.texi (Mouse References): + Add mouse-1-click-in-non-selected-windows. + +2005-02-25 Richard M. Stallman <rms@gnu.org> + + * screen.texi (Screen): Explain better about cursors and mode lines; + don't presuppose text terminals. + (Point): Don't assume just one cursor. + Clarify explanation of cursors. + (Echo Area, Menu Bar): Cleanups. + + * mini.texi (Minibuffer): Prompts are highlighted. + (Minibuffer Edit): Newline = C-j only on text terminals. + Clarify resize-mini-windows values. + Mention M-PAGEUP and M-PAGEDOWN. + (Completion Commands): Mouse-1 like Mouse-2. + (Minibuffer History): Explain history commands better. + (Repetition): Add xref to Incremental Search. + + * mark.texi (Setting Mark): Clarify info about displaying mark. + Clarify explanation of C-@ and C-SPC. + (Transient Mark): Mention Delete Selection mode. + (Marking Objects): Clean up text about extending the region. + + * m-x.texi (M-x): One C-g doesn't always go to top level. + No delay before suggest-key-bindings output. + + * fixit.texi (Fixit): Mention C-/ for undo. + (Spelling): Mention ESC TAB like M-TAB. + Replacement words with r and R are rechecked. + Say where C-g leaves point. Mention ? as input. + +2005-02-23 Lute Kamstra <lute@gnu.org> + + * cmdargs.texi (Initial Options): Add cross reference. + +2005-02-18 Jonathan Yavner <jyavner@member.fsf.org> + + * ses.texi: Add concept/function/variable indices (this work was + donated by Brad Collins <brad@chenla.org>, copyright-assignment + papers on file at FSF). + +2005-02-16 Luc Teirlinck <teirllm@auburn.edu> + + * emacs.texi (Top): Update menu for splitting of node in + msdog.texi. + * frames.texi (Frames): Update xref for splitting of node in + msdog.texi. + * trouble.texi (Quitting): Ditto. + +2005-02-16 Richard M. Stallman <rms@gnu.org> + + * windows.texi (Split Window): Simplify line truncation info + and xref to Display Custom. + + * trouble.texi (Quitting): Emergency escape only for text terminal. + (Screen Garbled): C-l for ungarbling is only for text terminal. + + * text.texi (Text Mode): ESC TAB alternative for M-TAB. + + * sending.texi (Header Editing): ESC TAB alternative for M-TAB. + + * programs.texi (Program Modes): Mention Python mode. + (Moving by Defuns): Repeating C-M-h extends region. + (Basic Indent): Clarify. + (Custom C Indent): Clarify. + (Expressions): Repeating C-M-@ extends region. + (Info Lookup): Clarify for C-h S. + (Symbol Completion): ESC TAB alternative for M-TAB. + (Electric C): Clarify. + + * emacs.texi (Top): Update display.texi and frames.texi submenu data. + + * msdog.texi (MS-DOS Keyboard, MS-DOS Mouse): Split from + MS-DOS Input node. + (MS-DOS Keyboard): Start with explaining DEL and BREAK. + (MS-DOS and MULE): Clarify. + (MS-DOS Processes, Windows Processes): Fix typos. + + * major.texi (Choosing Modes): Clarify. + + * kmacro.texi (Basic Keyboard Macro): Doc F3, F4. + (Keyboard Macro Step-Edit): Clarify. + + * indent.texi (Indentation): Clarifications. + + * help.texi (Help): Correct error about C-h in query-replace. + Clarify apropos vs C-h a. Fix how to search in FAQ. + (Key Help): Describe C-h w here. + (Name Help): Minor cleanup. C-h w moved to Key Help. + Clarify the "object" joke. + (Apropos): Clarify. Mouse-1 like Mouse-2. + (Help Mode): Mouse-1 like Mouse-2. + + * fixit.texi (Spelling): Mention ESC TAB as alt. for M-TAB. + + * display.texi (Display): Reorder menu. + (Faces): Cleanup. + (Font Lock): Cleanup. Mention Options menu. + Delete obsolete text. + (Scrolling): For C-l, don't presume text terminal. + (Horizontal Scrolling): Simplify intro. + (Follow Mode): Clarify. + (Cursor Display): Moved before Display Custom. + (Display Custom): Explain no-redraw-on-reenter is for text terminals. + Doc default-tab-width. Doc line truncation more thoroughly. + + * dired.texi (Dired Enter): C-x C-f can run Dired. + (Dired Visiting): Comment out `a' command. + Mouse-1 is like Mouse-2. + (Shell Commands in Dired): ? can be used more than once. + + * basic.texi (Continuation Lines): Simplify description of truncation, + and refer to Display Custom for the rest of it. + +2005-02-10 Jay Belanger <belanger@truman.edu> + + * calc.texi: Change @LaTeX to La@TeX throughout. + Redefine @expr as @math for TeX output. + Redefine @texline as a no-op for TeX output. + Define @tfn, replace @t by @tfn throughout. + +2005-02-09 Jay Belanger <belanger@truman.edu> + + * calc.texi: Add macro for LaTeX for info output. + +2005-02-08 Kim F. Storm <storm@cua.dk> + + * texinfo.tex (LaTex): Add def. + +2005-02-06 Jay Belanger <belanger@truman.edu> + + * calc.texi (TeX Language Mode): Add mention of LaTeX mode, and + change name to "TeX and LaTeX Language Modes." Mention LaTeX mode + throughout manual. + +2005-02-06 Lute Kamstra <lute@gnu.org> + + * basic.texi (Undo): Fix typo. + + * cmdargs.texi (Emacs Invocation): Fix typo. + + * custom.texi (Init Examples): Fix typo. + + * abbrevs.texi (Expanding Abbrevs): Fix typo. + +2005-02-06 Richard M. Stallman <rms@gnu.org> + + * regs.texi (Registers): Registers can hold numbers, too. + + * killing.texi (Other Kill Commands): Cleanup. + Delete redundant explanation of kill in read-only buffer. + (Yanking): Mention term "copying". + (Accumulating Text): Fix typo. + + * entering.texi (Entering Emacs): Update rationale at start. + (Exiting): Treat iconifying on a par with suspension. + + * custom.texi (Minor Modes): Fix typo. + (Easy Customization): Fix menu style. + (Variables): Add xref. + (Examining): Setting for future sessions works through .emacs. + (Keymaps): "Text terminals", not "Many". + (Init Rebinding): Explain \C-. Show example of \M-. + Fix minor wording errors. + (Function Keys): Explain vector syntax just once. + (Named ASCII Chars): Clarify history of TAB/C-i connection. + (Init File): Mention .emacs.d directory. + (Init Examples): Add xref. + (Find Init): Mention .emacs.d directory. + + * cmdargs.texi (Emacs Invocation): +LINENUM is also an option. + (Action Arguments): Explain which kinds of -l args are found how. + (Initial Options): --batch does not inhibit site-start. + Add xrefs. + (Command Example): Use --batch, not -batch. + + * basic.texi (Inserting Text): Cleanup wording. + (Moving Point): Doc PRIOR, PAGEUP, NEXT, PAGEDOWN more systematically. + C-n is not error at end of buffer. + (Undo): Doc C-/ like C-_. Add xrefs. + (Arguments): META key may be labeled ALT. + Peculiar arg meanings are explained in doc strings. + + * abbrevs.texi (Expanding Abbrevs): Clarify. + +2005-02-05 Eli Zaretskii <eliz@gnu.org> + + * frames.texi (Frame Parameters): Add an xref to the description + of list-colors-display. Add a pointer to the X docs about colors. + + * cmdargs.texi (Colors): Mention 16-, 88- and 256-color modes. + Impove docs of list-colors-display. + +2005-02-03 Lute Kamstra <lute@gnu.org> + + * frames.texi (Frames, Drag and Drop): Fix typos. + +2005-02-03 Richard M. Stallman <rms@gnu.org> + + * windows.texi (Basic Window): Mention color-change in mode line. + (Change Window): Explain dragging vertical boundaries. + + * text.texi (Sentences): Clarify. + (Paragraphs): Explain M-a and blank lines. + (Outline Mode): Clarify text and menu. + (Hard and Soft Newlines): Mention use-hard-newlines. + + * frames.texi (Frames): Delete unnecessary mention of Windows. + (Mouse Commands): Likewise. Mention xterm mouse support. + (Clipboard): Clarify. + (Mouse References): Mention use of Mouse-1 for following links. + (Menu Mouse Clicks): Clarify. + (Mode Line Mouse): Clarify. + (Drag and Drop): Rewrite. + + * fixit.texi (Spelling): Fix typo. + + * files.texi (File Names): Clarify. + (Visiting): Update conditions for use of file dialog. Clarify. + (Saving): Doc d as answer in save-some-buffers. + (Remote Files): Clean up the text. + + * dired.texi (Misc Dired Commands): Delete dired-marked-files. + + * buffers.texi (Select Buffer): Doc next-buffer and prev-buffer. + (List Buffers): Clarify. + (Several Buffers): Doc T command. + (Buffer Convenience): Clarify menu. + + * basic.texi (Undo): Clarify last change. + +2005-02-02 Matt Hodges <MPHodges@member.fsf.org> + + * fixit.texi (Spelling): Fix typo. + +2005-02-01 Luc Teirlinck <teirllm@auburn.edu> + + * basic.texi (Undo): Update description of `undo-outer-limit'. + +2005-02-01 Nick Roberts <nickrob@snap.net.nz> + + * building.texi: Update documentation relating to GDB Graphical + Interface. + +2005-01-30 Luc Teirlinck <teirllm@auburn.edu> + + * custom.texi (Easy Customization): Adapt menu to node name change. + +2005-01-30 Richard M. Stallman <rms@gnu.org> + + * custom.texi (Easy Customization): Defn of "User Option" now + includes faces. Don't say just "option" when talking about variables. + Do say just "options" to mean "anything customizable". + (Specific Customization): Describe `customize-variable', + not `customize-option'. + + * glossary.texi (Glossary) <Faces>: Add xref. + <User Option>: Change definition--include faces. Change xref. + + * picture.texi (Picture): Mention artist.el. + + * sending.texi, screen.texi, programs.texi, misc.texi: + * mini.texi, major.texi, maintaining.texi, macos.texi: + * help.texi, frames.texi, files.texi: + Don't say just "option" when talking about variables. + + * display.texi, mule.texi: Don't say just "option" when talking + about variables. Other minor cleanups. + +2005-01-28 Lars Magne Ingebrigtsen <larsi@gnus.org> + + * gnus.texi: Some edits based on comments from David Abrahams. + +2005-01-24 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (RSS): Fix the keystroke. + +2005-01-26 Lute Kamstra <lute@gnu.org> + + * cmdargs.texi (Initial Options): Add a cross reference to `Init + File'. Mention the `-Q' option at the `--no-site-file' option. + +2005-01-24 David Kastrup <dak@gnu.org> + + * faq.texi: Update AUCTeX version info. + +2005-01-16 Xavier Maillard <zedek@gnu-rox.org> (tiny change) + + * gnus-faq.texi ([4.1]): Typo. + +2005-01-22 David Kastrup <dak@gnu.org> + + * building.texi (Grep Searching): Mention alias `find-grep' for + `grep-find'. + +2005-01-20 Richard M. Stallman <rms@gnu.org> + + * calendar.texi (Time Intervals): Delete special stuff for MS-DOS. + +2005-01-19 Jay Belanger <belanger@truman.edu> + + * calc.texi (Keep Arguments): Mention that keeping arguments + doesn't work with keyboard macros. + +2005-01-16 Richard M. Stallman <rms@gnu.org> + + * autotype.texi (Autoinserting): Fix small error. + +2005-01-16 Michael Albinus <michael.albinus@gmx.de> + + Sync with Tramp 2.0.47. + + * tramp.texi (Compilation): New section, describing compilation of + remote files. + +2005-01-15 Sergey Poznyakoff <gray@Mirddin.farlep.net> + + * rmail.texi (Movemail): Explain differences + between standard and mailutils versions of movemail. + Describe command line and configuration options introduced + with the latter. + Explain the notion of mailbox URL, provide examples and + cross-references to mailutils documentation. + Describe various methods of specifying mailbox names, + user names and user passwords for rmail. + (Remote Mailboxes): New section. Describe + how movemail handles remote mailboxes. Describe configuration + options used to control its behavior. + (Other Mailbox Formats): Explain handling of various mailbox + formats. + +2005-01-13 Richard M. Stallman <rms@gnu.org> + + * commands.texi (Commands): Clarification. + +2005-01-11 Richard M. Stallman <rms@gnu.org> + + * programs.texi (Multi-line Indent): Fix previous change. + (Fortran Autofill): Simplify description of fortran-auto-fill-mode. + +2005-01-11 Kim F. Storm <storm@cua.dk> + + * widget.texi (Basic Types): Add :follow-link keyword. + +2005-01-09 Jay Belanger <belanger@truman.edu> + + * calc.texi (Basic Commands): Describe new behavior of calc-reset. + +2005-01-08 Richard M. Stallman <rms@gnu.org> + + * display.texi (Faces): isearch-lazy-highlight-face renamed to + lazy-highlight. + + * search.texi (Query Replace): Mention faces query-replace + and lazy-highlight. + (Incremental Search): Update isearch highlighting info. + +2005-01-08 Jay Belanger <belanger@truman.edu> + + * calc.texi: Change throughout to reflect new default value of + calc-settings-file. + +2005-01-06 Katsumi Yamaoka <yamaoka@jpl.org> + + * message.texi (Reply): `message-reply-to-function' should return + a list. Suggested by ARISAWA Akihiro <ari@mbf.ocn.co.jp>. + +2005-01-06 Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp> (tiny change) + + * faq.texi (Changing load-path): Fix typo. + +2005-01-05 Jay Belanger <belanger@truman.edu> + + * calc.texi (Programming Tutorial): Replace kbd command by + appropriate characters for a keyboard macro. + +2005-01-04 Jay Belanger <belanger@truman.edu> + + * calc.texi (Basic Tutorial, Programming Tutorial): Remove caveats + for Lucid Emacs. + (Programming Tutorial): Mention that the user needs to be in the + right mode to compute some functions. + +2005-01-04 Richard M. Stallman <rms@gnu.org> + + * custom.texi (Saving Customizations): Minor improvement. + +2005-01-04 Jay Belanger <belanger@truman.edu> + + * calc.texi (Rewrite rules): Remove an exercise (on 0^0) which is + no longer applicable. + +2005-01-03 Luc Teirlinck <teirllm@auburn.edu> + + * custom.texi (Saving Customizations): Emacs no longer loads + `custom-file' after .emacs. No longer mention customizing through + Custom. + +2005-01-01 Jay Belanger <belanger@truman.edu> + + * calc.texi (Programming Tutorial): Changed description of how to + edit keyboard macros to match current behavior. + +2005-01-01 Andreas Schwab <schwab@suse.de> + + * killing.texi (Graphical Kill): Move up under node Killing, + change @section to @subsection. + +2005-01-01 Richard M. Stallman <rms@gnu.org> + + * custom.texi (Face Customization): Mention hex color specs. + + * emacs.texi (Top): Update Killing submenu. + + * killing.texi (Killing): Reorganize section. + No more TeX-only text; put the node command at start of chapter. + But the first section heading is used only in TeX. + Rewrite the text to read better in this mode. + (Graphical Kill): New subnode gets some of the text that + used to be in the first section. + +2004-12-31 Richard M. Stallman <rms@gnu.org> + + * dired.texi (Shell Commands in Dired): Delete the ? example. + + * display.texi (Scrolling): Correct scroll-preserve-screen-position. + + * files.texi (Saving): Describe new require-final-newline features + and mode-require-final-newline. + +2004-12-31 Jay Belanger <belanger@truman.edu> + + * calc.texi: Mention C-cC-c as the way to finish editing throughout. + +2004-12-29 Richard M. Stallman <rms@gnu.org> + + * custom.texi (File Variables): Clarify previous change. + +2004-12-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * frames.texi (Dialog Boxes): Mention Gtk+ 2.6 also, as that version is + out now. + +2004-12-27 Richard M. Stallman <rms@gnu.org> + + * Makefile.in (MAKEINFO): Specify --force. + + * basic.texi (Moving Point): C-e now runs move-end-of-line. + (Undo): Doc undo-outer-limit. + +2004-12-20 Jay Belanger <belanger@truman.edu> + + * calc.texi (Types Tutorial): Emphasize that you can't divide by + zero. + +2004-12-17 Luc Teirlinck <teirllm@auburn.edu> + + * cc-mode.texi (Text Filling and Line Breaking): Put period after + @xref. + (Font Locking): Avoid @strong{Note:}. + +2004-12-17 Michael Albinus <michael.albinus@gmx.de> + + Sync with Tramp 2.0.46. + + * tramp.texi (bottom): Add arch-tag. It was lost, somehow. + +2004-12-16 Luc Teirlinck <teirllm@auburn.edu> + + * url.texi: Correct typos. + (Retrieving URLs): @var{nil}->@code{nil}. + (HTTP language/coding, mailto): Replace "GNU Emacs Manual" with + the standard "The GNU Emacs Manual" in fifth argument of @xref's. + (Dealing with HTTP documents): @inforef->@xref. + +2004-12-15 Juri Linkov <juri@jurta.org> + + * mark.texi (Transient Mark, Mark Ring): M-< and other + movement commands don't set mark in Transient Mark mode + if mark is active. + +2004-12-15 Jay Belanger <belanger@truman.edu> + + * calc.texi: Consistently capitalized all mode names. + (Answers to Exercises): Mention that an answer can be a fraction + when in Fraction mode. + +2004-12-13 Jay Belanger <belanger@truman.edu> + + * calc.texi: Fix some TeX definitions. + +2004-12-12 Juri Linkov <juri@jurta.org> + + * misc.texi (FFAP): Add C-x C-r, C-x C-v, C-x C-d, + C-x 4 r, C-x 4 d, C-x 5 r, C-x 5 d. + + * dired.texi (Dired Navigation): Add @r{(Dired)} to M-g. + (Misc Dired Commands): Add @r{(Dired)} to w. + +2004-12-12 Juri Linkov <juri@jurta.org> + + * mark.texi (Marking Objects): Marking commands also extend the + region when mark is active in Transient Mark mode. + +2004-12-09 Luc Teirlinck <teirllm@auburn.edu> + + * reftex.texi (Imprint): Remove erroneous @value's. + +2004-12-08 Luc Teirlinck <teirllm@auburn.edu> + + * custom.texi (Saving Customizations): Emacs only loads the custom + file automatically after the init file in version 22.1 or later. + Adapt text and examples to this fact. + + * makefile.w32-in (INFO_TARGETS, DVI_TARGETS, $(infodir)/org) + (org.dvi, $(infodir)/url, url.dvi, clean): Add org and url manuals. + +2004-12-08 Jay Belanger <belanger@truman.edu> + + * calc.texi (Starting Calc): Remove comment about installation. + (Keypad Mode Overview): Remove comment about Emacs 19 support. + +2004-12-08 Luc Teirlinck <teirllm@auburn.edu> + + * url.texi: Update @setfilename. + (Getting Started): No need to worry about Gnus versions. + (Dealing with HTTP documents): Use @inforef. + + * org.texi: Fix @direntry file name. + +2004-12-07 Luc Teirlinck <teirllm@auburn.edu> + + * frames.texi (Scroll Bars): The option `scroll-bar-mode' has to + be set through Custom. Otherwise, it has no effect. + +2004-12-07 Stefan <monnier@iro.umontreal.ca> + + * url.texi: New file. + + * Makefile.in (INFO_TARGETS, DVI_TARGETS, ../info/url, url.dvi): Add it. + +2004-12-06 Jay Belanger <belanger@truman.edu> + + * calc.texi (Using Calc): Remove paragraph about installation. + +2004-12-06 Jay Belanger <belanger@truman.edu> + + * calc.texi: Use more Texinfo macros and less TeX defs. + Remove @refill's. + +2004-12-06 Richard M. Stallman <rms@gnu.org> + + * org.texi: New file. + +2004-12-05 Richard M. Stallman <rms@gnu.org> + + * cmdargs.texi, doclicense.texi, xresources.texi, emacs.texi: + * entering.texi: Rename Command Line to Emacs Invocation. + + * Makefile.in (org.dvi, ../info/org): New targets. + (INFO_TARGETS): Add ../info/org. + (DVI_TARGETS): Add org.dvi. + (maintainer-clean): Remove the info files in the info dir. + + * misc.texi (Term Mode): Correcty describe C-c. + + * custom.texi (Easy Customization): Move up to section level, + before Variables. Avoid using the term "variable"; say "option". + New initial explanation. + (Variables): In initial explanation, connect "variable" to the + already-explained "user option". + + * emacs.texi (Top): Fix ref to Command Line. + Move reference to Easy Customization. + + * xresources.texi (X Resources): Fix From link. + + * doclicense.texi (GNU Free Documentation License): Fix To link. + + * entering.texi (Entering Emacs): Fix xref, now to Command Line. + + * cmdargs.texi (Command Line): Node renamed from Command Arguments. + +2004-12-03 Richard M. Stallman <rms@gnu.org> + + * cmdargs.texi (Initial Options): Clarify batch mode i/o. + +2004-12-01 Luc Teirlinck <teirllm@auburn.edu> + + * kmacro.texi: Several small changes in addition to the following. + (Keyboard Macro Ring): Describe behavior of `C-x C-k C-k' when + defining a keyboard macro. + Mention `kmacro-ring-max'. + (Keyboard Macro Counter): Clarify description of + `kmacro-insert-counter', `kmacro-set-counter', + `kmacro-add-counter' and `kmacro-set-format'. + +2004-11-29 Reiner Steib <Reiner.Steib@gmx.de> + + * custom.texi (File Variables): Add `unibyte' and make it more + clear that `unibyte' and `coding' are special. Suggested by Simon + Krahnke <overlord@gmx.li>. + + * mule.texi (Enabling Multibyte): Refer to File Variables. + Suggested by Simon Krahnke <overlord@gmx.li>. + +2004-11-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * frames.texi (Dialog Boxes): Rename use-old-gtk-file-dialog to + x-use-old-gtk-file-dialog. + +2004-11-26 Eli Zaretskii <eliz@gnu.org> + + * idlwave.texi: Fix the setfilename directive to put the produced + file in ../info. + (Continued Statement Indentation): Resurrect Jan D.'s change from + 2004-11-03 that was lost when a newer version of idlwave.texi was + imported. + +2004-11-20 Richard M. Stallman <rms@gnu.org> + + * text.texi (Fill Prefix): M-q doesn't apply fill prefix to first line. + +2004-11-09 Lars Brinkhoff <lars@nocrew.org> + + * building.texi (Lisp Eval): Delete hyphen in section name. + +2004-11-19 Thien-Thi Nguyen <ttn@gnu.org> + + * files.texi (Old Versions): + No longer document annotation as "CVS only". + +2004-11-10 Andre Spiegel <spiegel@gnu.org> + + * files.texi (Version Control): Rewrite the introduction about + version systems, mentioning the new ones that we support. Thanks + to Alex Ott, Karl Fogel, Stefan Monnier, and David Kastrup for + suggestions. + +2004-12-08 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus-faq.texi ([5.1]): Added missing bracket. + + * gnus.texi (Filtering Spam Using The Spam ELisp Package): Index + `spam-initialize'. + +2004-11-22 Reiner Steib <Reiner.Steib@gmx.de> + + * message.texi (Various Message Variables): Mention that all mail + file variables are derived from `message-directory'. + + * gnus.texi (Splitting Mail): Clarify bogus group. + +2004-11-02 Katsumi Yamaoka <yamaoka@jpl.org> + + * emacs-mime.texi (Encoding Customization): Fix + mm-coding-system-priorities entry. + +2004-11-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * frames.texi (Dialog Boxes): + * idlwave.texi (Continued Statement Indentation): + * reftex.texi (Options (Index Support)): + (Displaying and Editing the Index, Table of Contents): + * speedbar.texi (Creating a display, Major Display Modes): Replace + non-nil with non-@code{nil}. + +2004-11-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * frames.texi (Dialog Boxes): Document use-old-gtk-file-dialog. + +2004-10-23 Eli Zaretskii <eliz@gnu.org> + + * text.texi (Text Based Tables, Table Definition) + (Table Creation, Table Recognition, Cell Commands) + (Cell Justification, Row Commands, Column Commands) + (Fixed Width Mode, Table Conversion, Measuring Tables) + (Table Misc): New nodes, documenting the Table Mode. + +2004-10-21 Jay Belanger <belanger@truman.edu> + + * calc.texi (Algebraic-Style Calculations): Removed a comment. + +2004-10-19 Jason Rumney <jasonr@gnu.org> + + * makefile.w32-in (info): Change order of arguments to makeinfo. + +2004-10-19 Ulf Jasper <ulf.jasper@web.de> + + * calendar.texi (iCalendar): Update for package changes. + +2004-10-18 Luc Teirlinck <teirllm@auburn.edu> + + * calc.texi (Reporting Bugs): Double up `@'. + +2004-10-18 Jay Belanger <belanger@truman.edu> + + * calc.texi (Reporting Bugs): Changed the address that bugs + should be sent to. + +2004-10-15 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (New Features): Add 5.11. + + * message.texi (Resending): Remove wrong default value. + + * gnus.texi (Mail Source Specifiers): Describe possible problems + of `pop3-leave-mail-on-server'. Add `pop3-movemail' and + `pop3-leave-mail-on-server' to the index. + +2004-10-15 Katsumi Yamaoka <yamaoka@jpl.org> + + * message.texi (Canceling News): Add how to set a password. + +2004-10-12 Jay Belanger <belanger@truman.edu> + + * calc.texi (Help Commands): Changed the descriptions of + calc-describe-function and calc-describe-variable to match their + current behavior. + +2004-10-12 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus-faq.texi ([5.9]): Improve code for reply-in-news. + +2004-10-12 Michael Albinus <michael.albinus@gmx.de> + + Sync with Tramp 2.0.45. + + * tramp.texi (Frequently Asked Questions): Comment paragraph about + plink link. The URL is outdated. Originator contacted for + clarification. + +2004-10-10 Juri Linkov <juri@jurta.org> + + * gnus.texi (Top, Marking Articles): Join two menus in one node + because a node can have only one menu. + +2004-10-09 Luc Teirlinck <teirllm@auburn.edu> + + * files.texi (Misc File Ops): View mode is a minor mode. + +2004-10-09 Juri Linkov <juri@jurta.org> + + * gnus.texi (Fancy Mail Splitting): Remove backslash in the + example of nnmail-split-fancy. + +2004-10-08 Glenn Morris <gmorris@ast.cam.ac.uk> + + * calendar.texi (iCalendar): Style changes. + +2004-10-07 Luc Teirlinck <teirllm@auburn.edu> + + * search.texi (Regexps): The regexp described in the example is no + longer stored in the variable `sentence-end'. + +2004-10-06 Karl Berry <karl@gnu.org> + + * info.texi (@kbd{1}--@kbd{9}): No space around --, for + consistency with other uses of dashes. + +2004-10-06 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Starting GUD): Note that multiple debugging + sessions requires `gdb --fullname'. + +2004-10-05 Ulf Jasper <ulf.jasper@web.de> + + * calendar.texi (iCalendar): New section for a new package. + +2004-10-05 Karl Berry <karl@gnu.org> + + * info.texi: Consistently use --- throughout, periods at end of + menu descriptions, and a couple typos. + +2004-10-05 Luc Teirlinck <teirllm@auburn.edu> + + * text.texi: Various small changes in addition to the following. + (Text): Replace xref for autotype with inforef. + (Sentences): Explain nil value for `sentence-end'. + (Paragraphs): Update default values for `paragraph-start' and + `paragraph-separate'. + (Text Mode): Correct description of Text mode's effect on the + syntax table. + (Outline Visibility): `hide-other' does not hide top level headings. + `selective-display-ellipses' no longer has an effect on Outline mode. + (TeX Misc): Add missing @cindex. + Replace xref for RefTeX with inforef. + (Requesting Formatted Text): The variable + `enriched-fill-after-visiting' no longer exists. + (Editing Format Info): Update names of menu items and commands. + (Format Faces): Mention special effect of specifying the default face. + Describe inheritance of text properties. + Correct description of `fixed' face. + (Format Indentation): Correct description of effect of setting + margins. Mention `set-left-margin' and `set-right-margin'. + (Format Justification): Update names of menu items. + `set-justification-full' is now bound to `M-j b'. + Mention that `default-justification' is a per buffer variable. + (Format Properties): Update name of menu item. + (Forcing Enriched Mode): `format-decode-buffer' automatically + turns on Enriched mode if the buffer is in text/enriched format. + +2004-10-05 Emilio C. Lopes <eclig@gmx.net> + + * calendar.texi (From Other Calendar): Add calendar-goto-iso-week. + +2004-09-28 Kim F. Storm <storm@cua.dk> + + * display.texi (Display Custom) <indicate-buffer-boundaries>: + Align with new functionality. + +2004-09-26 Jesper Harder <harder@ifa.au.dk> + + * sieve.texi (Manage Sieve API): nil -> @code{nil}. + * pgg.texi (User Commands, Backend methods): Do. + * gnus.texi: Markup fixes. + (Setting Process Marks): Fix `M P a' entry. + * emacs-mime.texi: Fixes. + +2004-09-23 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus-faq.texi ([5.12]): Fix code example for FQDN in Message-Ids + again. + Use 5.10 instead of 5.10.0. + +2004-09-20 Lars Magne Ingebrigtsen <larsi@gnus.org> + + * gnus.texi (Summary Mail Commands): S D e. + +2004-09-20 Raymond Scholz <ray-2004@zonix.de> (tiny change) + + * gnus.texi (Misc Article): Refer to `Summary Buffer Mode Line' in + the gnus-article-mode-line-format section. + +2004-09-20 Helmut Waitzmann <Helmut.Waitzmann@web.de> (tiny change) + + * gnus.texi (Various Summary Stuff): Fix the documentation for + gnus-newsgroup-variables. + +2004-09-20 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (MIME Commands): Added + gnus-mime-display-multipart-as-mixed, + gnus-mime-display-multipart-alternative-as-mixed, + gnus-mime-display-multipart-related-as-mixed. + (Mail Source Customization): Clarify `mail-source-directory'. + (Splitting Mail): Mention gnus-group-find-new-groups. + (SpamOracle): Fixed typo. + + * gnus-faq.texi: Untabify. + ([6.3]): nnir.el is in contrib directory. + + * message.texi (News Headers): Clarify how a unique ID is created. + + * gnus.texi (Batching Agents): Fixed typo in example. Reported + by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>. + +2004-09-20 Andre Srinivasan <andre@e2open.com> + + * gnus.texi (Group Parameters): Added more on hooks. (Small + change.) + +2004-09-20 Florian Weimer <fw@deneb.enyo.de> + + * gnus.texi (Charsets): Point to relevant section in emacs-mime. + +2004-09-22 Luc Teirlinck <teirllm@auburn.edu> + + * display.texi (Display Custom): Remove stray `@end defvar'. + +2004-09-23 Kim F. Storm <storm@cua.dk> + + * display.texi (Display Custom): Add `overflow-newline-into-fringe', + `indicate-buffer-boundaries' and `default-indicate-buffer-boundaries'. + +2004-09-22 Jay Belanger <belanger@truman.edu> + + * calc.texi (Vectors as Lists): Added a warning that the tutorial + might be hidden during part of the session. + +2004-09-20 Jay Belanger <belanger@truman.edu> + + * calc.texi (Notations Used in This Manual): Put in an earlier + mention that DEL could be called Backspace. + +2004-09-20 Richard M. Stallman <rms@gnu.org> + + * custom.texi (Hooks): Explain using setq to clear out a hook. + (File Variables): Explain multiline string constants. + (Non-ASCII Rebinding): Explain when you need to update + non-ASCII char codes in .emacs. + + * building.texi (Compilation): Explain how to make a silent + subprocess that won't be terminated. Explain compilation-environment. + +2004-09-13 Kim F. Storm <storm@cua.dk> + + * mini.texi (Repetition): Rename isearch-resume-enabled to + isearch-resume-in-command-history and change default to disabled. + +2004-09-10 Simon Josefsson <jas@extundo.com> + + * gnus.texi (IMAP): Add example. Suggested and partially written + by Steinar Bang <sb@dod.no>. + +2004-09-10 Teodor Zlatanov <tzz@lifelogs.com> + + * gnus.texi (IMAP): Add comments about imaps synonym to imap in + netrc syntax. + +2004-09-10 Teodor Zlatanov <tzz@lifelogs.com> + + * gnus.texi (Spam ELisp Package Sequence of Events): Some clarifications. + (Spam ELisp Package Global Variables): More clarifications. + +2004-09-10 Teodor Zlatanov <tzz@lifelogs.com> + + * gnus.texi (Spam ELisp Package Filtering of Incoming Mail): + Mention spam-split does not modify incoming mail. + +2004-09-10 Teodor Zlatanov <tzz@lifelogs.com> + + * gnus.texi (Spam ELisp Package Sequence of Events): Fix typo. + +2004-09-10 Eli Zaretskii <eliz@gnu.org> + + * Makefile.in (../info/gnus, gnus.dvi): Depend on gnus-faq.texi. + +2004-09-09 Kim F. Storm <storm@cua.dk> + + * kmacro.texi (Save Keyboard Macro): Replace `name-last-kbd-macro' + with new `kmacro-name-last-macro'. + +2004-09-09 Reiner Steib <Reiner.Steib@gmx.de> + + * makefile.w32-in (sieve, pgg): Use $(infodir). + +2004-09-08 Juri Linkov <juri@jurta.org> + + * mini.texi (Minibuffer History): Add `history-delete-duplicates'. + +2004-09-08 Dhruva Krishnamurthy <dhruva.krishnamurthy@gmail.com> (tiny change) + + * makefile.w32-in: Fix PGG and Sieve entries. + +2004-09-03 Juri Linkov <juri@jurta.org> + + * search.texi (Incremental Search): Update wording for M-%. + +2004-09-02 Luc Teirlinck <teirllm@auburn.edu> + + * killing.texi (Killing): Correct description of kill commands in + read-only buffer. + +2004-09-02 Teodor Zlatanov <tzz@lifelogs.com> + + * building.texi (Compilation Mode): Add a paragraph about rules + for finding the compilation buffer for `next-error'. + + * search.texi (Other Repeating Search): Mention that Occur mode + supports the next-error functionality. + +2004-09-02 Juri Linkov <juri@jurta.org> + + * search.texi (Regexp Replace): Add missing backslash to \footnote. + +2004-08-31 Luc Teirlinck <teirllm@auburn.edu> + + * kmacro.texi (Basic Keyboard Macro): + `apply-macro-to-region-lines' now operates on all lines that begin + in the region, rather than on all complete lines in the region. + +2004-08-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * frames.texi (Drag and drop): Add documentation about + x-dnd-test-function and x-dnd-known-types. + +2004-08-30 Luc Teirlinck <teirllm@auburn.edu> + + * indent.texi: Various minor changes in addition to: + (Indentation Commands): Correct description of `indent-relative'. + (Tab Stops): <TAB> is no longer bound to `tab-to-tab-stop' in Text + mode. The *Tab Stops* buffer uses Overwrite Mode. + (Just Spaces): `tabify' converts sequences of at least two spaces + to tabs. + +2004-08-28 Eli Zaretskii <eliz@gnu.org> + + * faq.texi (Emacs for MS-DOS): Update URLs for the MS-DOS port of + Emacs and related programs. + +2004-08-27 Luc Teirlinck <teirllm@auburn.edu> + + * frames.texi (Secondary Selection): Setting the secondary + selection with M-Drag-Mouse-1 does not alter the kill ring, + setting it with M-Mouse-1 and M-Mouse-3 does. + (Mode Line Mouse): C-Mouse-2 on scroll bar now also works for + toolkit scroll bars. + (Scroll Bars): Ditto. + + * windows.texi (Basic Window): When using a window system, the value + of point in a non-selected window is indicated by a hollow box. + (Split Window): Side by side windows are separated by a scroll bar, + if scroll bars are used. + C-Mouse-2 on scroll bar now also works for toolkit scroll bars. + (Change Window): Correct Mouse-2 vs Mouse-3 mess-up. + (Window Convenience): Update bindings for `winner-undo' and + `winner-redo'. + + * ack.texi (Acknowledgments): Use `@unnumbered'. + * misc.texi : Adapt sectioning in Info to the node structure. + (Invoking emacsclient): Make "Invoking emacsclient" a subsection + of "Using Emacs as a Server". + * building.texi (Building): Interchange nodes (for correct numbering). + * programs.texi (Programs): Interchange nodes (for correct numbering). + * killing.texi, entering.texi, commands.texi: Adapt sectioning in + Info to the node structure. + * emacs.texi: Make "GNU GENERAL PUBLIC LICENSE" an appendix. + Rearrange order of nodes and sections such that both "GNU GENERAL + PUBLIC LICENSE" and "GNU Free Documentation License" appear at the + end, as appropriate for appendices. + (Acknowledgments): Put inside @iftex instead of @ifnotinfo. + Use `@unnumberedsec'. + * trouble.texi: Adapt sectioning in Info to the node structure. + Adapt node pointers to change in emacs.texi. + * cmdargs.texi, doclicense.texi: Adapt node pointers. + +2004-08-27 Richard M. Stallman <rms@gnu.org> + + * faq.texi: Fix texinfo usage, esp. doublequotes. + (Difference between Emacs and XEmacs): Some clarification. + + * faq.texi (Difference between Emacs and XEmacs): + Explain not to contrast XEmacs with GNU Emacs. + +2004-08-26 Richard M. Stallman <rms@gnu.org> + + * faq.texi (Difference between Emacs and XEmacs): Rewrite. + +2004-08-25 Kenichi Handa <handa@m17n.org> + + * custom.texi (Non-ASCII Rebinding): Fix and simplify the + description for unibyte mode. + +2004-08-23 Luc Teirlinck <teirllm@auburn.edu> + + * display.texi (Font Lock): Correct invalid (for hardcopy) @xref. + + * search.texi (Regexps): Correct cryptic (in hardcopy) @ref. + (Configuring Scrolling): Correct invalid (for hardcopy) @xref. + (Regexp Replace): Standardize reference to hardcopy Elisp Manual + in @pxref. + +2004-08-22 Luc Teirlinck <teirllm@auburn.edu> + + * kmacro.texi (Keyboard Macro Counter, Keyboard Macro Step-Edit): + Change section names. + +2004-08-22 David Kastrup <dak@gnu.org> + + * reftex.texi (AUCTeX): Update links, section name. + + * faq.texi (Calc): Update availability (included in 22.1). + (AUCTeX): Update availability, information, versions, description. + +2004-08-21 Luc Teirlinck <teirllm@auburn.edu> + + * kmacro.texi (Keyboard Macro Ring): Rename section. + Emacs treats the head of the macro ring as the `last keyboard macro'. + (Keyboard Macro Counter): Minor change. + (Save Keyboard Macro): Some clarifications. + (Edit Keyboard Macro): Rename section. + + * buffers.texi (Buffers): Maximum buffer size is now 256M on + 32-bit machines. + (Several Buffers): Clarify which buffer is selected if `2' is + pressed in the Buffer Menu. + Auto Revert mode can be used to update the Buffer Menu + automatically. + +2004-08-21 Eli Zaretskii <eliz@gnu.org> + + * help.texi (Misc Help): Add an index entry for finding an Info + manual by its file name. + +2004-08-20 Luc Teirlinck <teirllm@auburn.edu> + + * files.texi (Backup Deletion): Correct description of + `delete-old-versions'. + (Time Stamps): `time-stamp' needs to be added to `before-save-hook'. + (Auto Save Files): Recommend `auto-save-mode' to reenable + auto-saving, rather than the abbreviation `auto-save'. + +2004-08-17 Luc Teirlinck <teirllm@auburn.edu> + + * emacs.texi (Top): Mention "cutting" and "pasting" as synonyms + for "killing" and "yanking" in main menu. + +2004-08-16 Richard M. Stallman <rms@gnu.org> + + * killing.texi (Yanking, Killing): Minor cleanups. + + * mark.texi (Momentary Mark): Minor cleanups. + +2004-08-15 Kenichi Handa <handa@etl.go.jp> + + * custom.texi (Non-ASCII Rebinding): + C-q always inserts the right code to pass to global-set-key. + +2004-08-14 Eli Zaretskii <eliz@gnu.org> + + * Makefile.in (../info/tramp, tramp.dvi): Depend on trampver.texi. + +2004-08-13 Luc Teirlinck <teirllm@auburn.edu> + + * regs.texi (RegNumbers): Mention `C-x r i' binding for + `insert-register', instead of `C-x r g' binding, for consistency. + +2004-08-12 Luc Teirlinck <teirllm@auburn.edu> + + * fixit.texi (Spelling): Fix typo. + +2004-08-11 Luc Teirlinck <teirllm@auburn.edu> + + * help.texi (Help): Fix Texinfo usage. + +2004-08-11 Martin Stjernholm <bug-cc-mode@gnu.org> + + * cc-mode.texi: Various updates for CC Mode 5.30.9. + +2004-08-10 Michael Albinus <michael.albinus@gmx.de> + + Sync with Tramp 2.0.44. + +2004-08-05 Lars Hansen <larsh@math.ku.dk> + + * widget.texi (User Interface): Update how to separate the + editable field of an editable-field widget from other widgets. + (Programming Example): Add text after field. + +2004-07-24 Richard M. Stallman <rms@gnu.org> + + * text.texi (Paragraphs): Update how paragraphs are separated + and the default for paragraph-separate. + + * search.texi (Regexp Replace): Further update text for new + replacement operators. + +2004-08-31 Katsumi Yamaoka <yamaoka@jpl.org> + + * emacs-mime.texi (Encoding Customization): Add a note to the + mm-content-transfer-encoding-defaults entry. + (rfc2047): Update. + + * gnus.texi (Article Highlighting): Add + gnus-cite-ignore-quoted-from. + (POP before SMTP): New node. + (Posting Styles): Addition. + (Splitting Mail): Add nnmail-split-lowercase-expanded. + (Fancy Mail Splitting): Ditto. + (X-Face): Add gnus-x-face. + +2004-08-30 Reiner Steib <Reiner.Steib@gmx.de> + + * emacs-mime.texi, gnus-faq.texi, gnus.texi, message.texi, + * pgg.texi, sieve.texi: Use @copying and @insertcopying. + +2004-08-22 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi (Mail Source Specifiers): Describe + `pop3-leave-mail-on-server'. + +2004-08-02 Reiner Steib <Reiner.Steib@gmx.de> + + * Makefile.in, makefile.w32-in: Added PGG and Sieve files. + + * pgg.texi, sieve.texi: Import from the v5_10 branch of the Gnus + repository. Change setfilename. + + * emacs-mime.texi, gnus-faq.texi, gnus.texi, message.texi: Ditto. + +2004-07-18 Luc Teirlinck <teirllm@auburn.edu> + + * emacs-xtra.texi (Subdir switches): Dired does not remember the + `R' switch. + + * dired.texi (Dired Updating): `k' only deletes inserted + subdirectories from the Dired buffer if a prefix argument was given. + + * search.texi (Regexps): Delete redundant definition of `symbol' in + description of `\_>'. It already occurs in the description of `\_<'. + +2004-07-02 Juri Linkov <juri@jurta.org> + + * pcl-cvs.texi (Viewing differences): Add `d r'. + +2004-07-01 Juri Linkov <juri@jurta.org> + + * search.texi (Incremental Search): Add C-M-w, C-M-y, M-%, C-M-%, M-e. + (Regexp Search): Add M-r. + +2004-06-30 Luc Teirlinck <teirllm@auburn.edu> + + * makefile.w32-in (EMACSSOURCES): Remove emacs-xtra. + +2004-06-29 Jesper Harder <harder@ifa.au.dk> + + * ses.texi, viper.texi, search.texi, flymake.texi, faq.texi: + * eshell.texi, ediff.texi, calendar.texi: Markup fixes. + +2004-06-25 Richard M. Stallman <rms@gnu.org> + + * search.texi (Regexp Replace): Rewrite description of \# \, and \?. + +2004-06-25 David Kastrup <dak@gnu.org> + + * search.texi (Regexp Replace): Some typo corrections and + rearrangement. + +2004-06-24 David Kastrup <dak@gnu.org> + + * search.texi (Unconditional Replace): Use replace-string instead + of query-replace in example. + (Regexp Replace): Add explanations for `\,', `\#' and `\?' + sequences. + (Query Replace): Correct explanation of `^' which does not use + the mark stack. + +2004-06-21 Nick Roberts <nickrob@gnu.org> + + * misc.texi (Shell History Copying): Document comint-insert-input. + (Shell Ring): Describe comint-dynamic-list-input-ring here. + +2004-06-21 Karl Berry <karl@gnu.org> + + * info.texi (Top): Mention that only Emacs has mouse support. + (Getting Started): Mention this in a few other places. + +2004-06-20 Jesper Harder <harder@ifa.au.dk> + + * msdog.texi (Text and Binary, MS-DOS Printing): Use m-dash. + * custom.texi (Customization): Do. + * anti.texi (Antinews): Do. + * abbrevs.texi (Defining Abbrevs): Do. + + * programs.texi (Info Lookup): Fix keybinding for + info-lookup-symbol. + +2004-06-16 Juanma Barranquero <lektu@terra.es> + + * makefile.w32-in (INFO_TARGETS, DVI_TARGETS, EMACSSOURCES): + Add emacs-xtra. + ($(infodir)/emacs-xtra, emacs-xtra.dvi): New dependencies. + (clean): Add emacs-xtra and flymake. Remove redundancies. + +2004-06-15 Luc Teirlinck <teirllm@auburn.edu> + + * Makefile.in (INFO_TARGETS, DVI_TARGETS, ../info/emacs-xtra): + Add emacs-xtra. + * emacs-xtra.texi: New file. + +2004-06-14 Luc Teirlinck <teirllm@auburn.edu> + + * dired.texi (Dired Enter): Mention conditions on `ls' switches. + (Dired and Find): Mention differences with ordinary Dired buffers. + +2004-06-13 Luc Teirlinck <teirllm@auburn.edu> + + * autotype.texi (Copyrights, Timestamps): Recommend + `before-save-hook' instead of `write-file-functions'. + +2004-06-13 Richard M. Stallman <rms@gnu.org> + + * custom.texi (Init Syntax): Explain about vars that do special + things when set with setq or with Custom. + (Init Examples): Add line-number-mode example. + +2004-06-13 Lars Hansen <larsh@math.ku.dk> + + * dired-x.texi (dired-mark-omitted): Update keybinding. + +2004-06-12 Juri Linkov <juri@jurta.org> + + * dired.texi (Operating on Files): Add dired-do-touch. + +2004-06-10 Kim F. Storm <storm@cua.dk> + + * pcl-cvs.texi (Viewing differences): Add 'd y'. + +2004-06-10 Juri Linkov <juri@jurta.org> + + * building.texi (Lisp Eval): Add C-M-x on defface. + +2004-06-08 Luc Teirlinck <teirllm@auburn.edu> + + * files.texi (Reverting): Auto-Revert mode and + Global Auto-Revert mode no longer revert remote files. + +2004-06-05 Lars Hansen <larsh@math.ku.dk> + + * dired-x.texi (variable dired-omit-mode): Rename from + dired-omit-files-p. + (function dired-omit-mode): Rename from dired-omit-toggle. + Call dired-omit-mode rather than set dired-omit-files-p. + (dired-mark-omitted): Describe command. + +2004-05-29 Michael Albinus <michael.albinus@gmx.de> + + Version 2.0.41 of Tramp released. + +2004-05-29 Juanma Barranquero <lektu@terra.es> + + * makefile.w32-in (../info/flymake, flymake.dvi): New targets. + (INFO_TARGETS, DVI_TARGETS): Add Flymake. + +2004-05-29 Richard M. Stallman <rms@gnu.org> + + * custom.texi (Init File): Two dashes start --no-site-file. + + * cl.texi (Top): Call this chapter `Introduction'. + (Overview): In TeX, no section heading here. + + * cc-mode.texi: Put commas after i.e. and e.g. Minor cleanups. + +2004-05-29 Alan Mackenzie <acm@muc.de> + + * programs.texi: Update for CC Mode 5.30 and incidental amendments. + ("AWK"): Is consistently thus spelt throughout. + (AWK, Pike): Document as "C-like modes". + (@kbd{M-j}): Document as alternative to @kbd{C-M-j}. + (M-x man): Supersedes M-x manual-entry. + Add numerous index entries. Correct "ESC a/e" to "M-a/e". + + ("Comments in C"): Delete node; the info is in CC Mode manual. + (c-comment-only-line-offset): Remove description. + + (C-c ., C-c C-c): Describe new C Mode bindings. + + (C-u TAB, indent-code-rigidly, c-indent-exp, c-tab-always-indent) + (@dfn{Style}, c-default-style, comment-column, comment-padding) + (c-up-conditional, c-beginning-of-statement, c-end-of-statement): + Amend definitions. + + (c-beginning-of-defun, c-end-of-defun, c-context-line-break): + Describe functions. + + (c-comment-start-regexp, c-hanging-comment-ender-p) + (c-hanging-comment-starter-p): Remove obsolete definitions. + + * emacs.texi: Remove the menu entry "Comments in C". + +2004-05-29 Eli Zaretskii <eliz@gnu.org> + + * Makefile.in (../info/flymake, flymake.dvi): New targets. + (INFO_TARGETS, DVI_TARGETS): Add Flymake. + +2004-05-29 Pavel Kobiakov <pk_at_work@yahoo.com> + + * flymake.texi: New file. + +2004-05-28 Simon Josefsson <jas@extundo.com> + + * smtpmail.texi (Authentication): Improve STARTTLS discussion. + +2004-05-27 Luc Teirlinck <teirllm@auburn.edu> + + * dired.texi (Dired and Find): `find-ls-option' does not apply to + `M-x locate'. + +2004-05-16 Karl Berry <karl@gnu.org> + + * emacs.texi (ack.texi) [@ifnottex]: Change condition; with @ifinfo, + makeinfo --html fails. + * help.texi (Help Summary) [@ifnottex]: Likewise. + +2004-05-13 Nick Roberts <nickrob@gnu.org> + + * building.texi (GDB Graphical Interface): Update and describe + layout first. + +2004-05-07 Kai Grossjohann <kai@emptydomain.de> + + Version 2.0.40 of Tramp released. + +2004-04-25 Michael Albinus <Michael.Albinus@alcatel.de> + + Complete rework, based on review by Karl Berry <karl@gnu.org>. + + * tramp.texi (Auto-save and Backup): Explain exploitation of new + variables `tramp-backup-directory-alist' and + `tramp-bkup-backup-directory-info'. + (Overview, Connection types) + (External transfer methods, Default Method) + (Windows setup hints): Remove restriction of password entering + with external methods. + (Auto-save and Backup): Make file name example + (X)Emacs neutral. In case of XEmacs, `bkup-backup-directory-info' + and `auto-save-directory' must be used. + (Frequently Asked Questions): Use "MS Windows NT/2000/XP" (not + only "NT"). Remove doubled entry "What kinds of systems does + @tramp{} work on". + (tramp): Macro removed. + (Obtaining Tramp): Flag removed from title. + (all): "tramp-" and "-" removed from flag names. Flags `tramp' + and `trampver' used properly. Flag `tramp-inst' replaced by + `installchapter'. Installation related text adapted. + +2004-05-04 Jason Rumney <jasonr@gnu.org> + + * makefile.w32-in: Revert last change. + +2004-05-03 Jason Rumney <jasonr@gnu.org> + + * makefile.w32-in (MULTI_INSTALL_INFO, ENVADD): Use forward slashes. + +2004-04-28 Masatake YAMATO <jet@gyve.org> + + * widget.texi (Programming Example): Remove overlays. + +2004-04-27 Jesper Harder <harder@ifa.au.dk> + + * faq.texi, viper.texi, dired-x.texi, autotype.texi: lisp -> Lisp. + +2004-04-23 Juanma Barranquero <lektu@terra.es> + + * makefile.w32-in: Add "-*- makefile -*-" mode tag. + +2004-04-18 Juri Linkov <juri@jurta.org> + + * fixit.texi (Spelling): Remove file extension from ispell xref. + +2004-04-15 Kim F. Storm <storm@cua.dk> + + * cmdargs.texi (Initial Options): Add -Q. + +2004-04-05 Kim F. Storm <storm@cua.dk> + + * custom.texi (File Variables): Add safe-local-eval-forms. + +2004-04-05 Jesper Harder <harder@ifa.au.dk> + + * info.texi (Info Search): Add info-apropos. + +2004-04-02 Luc Teirlinck <teirllm@auburn.edu> + + * files.texi (Reverting): Correct description of revert-buffer's + handling of point. + +2004-03-22 Juri Linkov <juri@jurta.org> + + * emacs.texi (Top): Add `Misc X'. + + * faq.texi, trouble.texi: Fix help key bindings. + + * glossary.texi: Improve references. + + * help.texi: Sync keywords with finder.el. + + * mini.texi (Completion): Add description for menu items. + + * misc.texi (Browse-URL, FFAP): Add information about keywords. + + * sending.texi (Mail Methods): Fix xref to Message manual. + +2004-03-17 Luc Teirlinck <teirllm@auburn.edu> + + * info.texi (Advanced): Replace @unnumberedsubsec by @subheading + (as suggested by Karl Berry). Update information about colored + stars in menus. Add new subheading describing M-n. + +2004-03-12 Richard M. Stallman <rms@gnu.org> + + * cl.texi (Top): Rename top node's title. + + * buffers.texi (Misc Buffer): Add index entry for rename-uniquely. + +2004-03-08 Karl Berry <karl@gnu.org> + + * info.texi: \input texinfo.tex instead of just texinfo, to avoid + problems making the texinfo distribution. + +2004-03-04 Richard M. Stallman <rms@gnu.org> + + * search.texi (Regexps): Explain that ^ and $ have their + special meanings only in certain contexts. + + * programs.texi (Expressions): Doc C-M-SPC as alias for C-M-@. + + * mule.texi (Specify Coding): Doc C-x RET F. + + * buffers.texi (Misc Buffer): Explain use of M-x rename-uniquely + for multiple compile and grep buffers. + (Indirect Buffers): Don't recommand clone-indirect-buffer + for multiple compile and grep buffers. + +2004-02-29 Simon Josefsson <jas@extundo.com> + + * smtpmail.texi (Authentication): Changed the list of supported + authentication mechanisms from CRAM-MD5, PLAIN and LOGIN-MD5 to + CRAM-MD5 and LOGIN, tiny patch from Andreas Voegele + <voegelas@gmx.net>. + +2004-02-29 Juanma Barranquero <lektu@terra.es> + + * makefile.w32-in (mostlyclean, clean, maintainer-clean): + Use $(DEL) instead of rm, and ignore exit code. + +2004-02-29 Kai Grossjohann <kgrossjo@eu.uu.net> + + Tramp version 2.0.39 released. + +2004-02-29 Michael Albinus <Michael.Albinus@alcatel.de> + + * tramp.texi (Customizing Completion): Explain new functions + `tramp-parse-shostkeys' and `tramp-parse-sknownhosts'. + (all): Savannah URLs unified to "http://savannah.nongnu.org". + (Top): Refer to Savannah mailing list as the major one. Mention + older mailing lists in HTML mode only. + (Auto-save and Backup): Add auto-save. Based on wording of Kai. + (Frequently Asked Questions): Remote hosts must not be Unix-like + for "smb" method. + (Password caching): New node. + (External transfer methods): Refer to password caching for "smb" + method. + +2004-02-23 Nick Roberts <nick@nick.uklinux.net> + + * building.texi (Watch Expressions): Update. + +2004-02-21 Juri Linkov <juri@jurta.org> + + * cmdargs.texi (Action Arguments): Add alias --find-file. Add + --directory, --help, --version. Move text about command-line-args + to Command Arguments. + (Initial Options): Add @cindex for --script. Fix @cindex for -q. + Add --no-desktop. Add alias --no-multibyte, --no-unibyte. + (Window Size X): Join -g and --geometry. Add @cindex. + (Borders X): Fix @cindex for -ib. Add @cindex for -bw. + (Title X): Remove alias -title. + (Misc X): New node. + +2004-02-17 Karl Berry <karl@gnu.org> + + * info.texi (Help-Int): Mention the new line number feature. + +2004-02-15 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * frames.texi (Drag and drop): Add Motif to list of supported + protocols. + +2004-02-14 Jonathan Yavner <jyavner@member.fsf.org> + + * ses.texi (Advanced Features): New functionality for + ses-set-header-row (defaults to current row unless C-u used). + (Acknowledgements): Add Stefan Monnier. + +2004-02-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * frames.texi (Drag and drop): New section. + +2004-01-24 Richard M. Stallman <rms@gnu.org> + + * emacs.texi (Acknowledgments): Renamed from Acknowledgements. + Include it only @ifnotinfo. Patch the preceding and following + node headers to point to each other. + +2004-01-11 Glenn Morris <gmorris@ast.cam.ac.uk> + + * calendar.texi (Appointments): Update section. + +2003-12-29 Kevin Ryde <user42@zip.com.au> + + * viper.texi (Vi Macros): Fix reference to the Emacs manual. + + * programs.texi (C Modes): Fix the xref. + +2003-12-23 Nick Roberts <nick@nick.uklinux.net> + + * building.texi (Watch Expressions): Update. + (Commands of GUD): Include use of toolbar + breakpoints set from + fringe/margin. + +2003-12-03 Andre Spiegel <spiegel@gnu.org> + + * files.texi: Say how to disable VC. Suggested by Alan Mackenzie + <acm@muc.de>. + +2003-11-30 Kai Grossjohann <kai.grossjohann@gmx.net> + + Tramp version 2.0.38 released. + + * tramp.texi (Remote shell setup): Warn of environment variables + FRUMPLE if user frumple exists. Suggested by Sven Gabriel + <sven.gabriel@imk.fzk.de>. + (Configuration): Tramp now chooses base64/uuencode + automatically. Update wording accordingly. + (Top): More description for the `Default Method' menu entry. + (Default Method): Use @code, not @var, for Lisp variables. + (Default Method): New subsection `Which method is the right one + for me?' Suggested by Christian Kirsch. + (Configuration): Pointer to new subsection added. + (Default Method): Too many "use" in one sentence. + Rephrase. Reported by Christian Kirsch. + (Filename Syntax): Old `su' example is probably a left-over from + the sm/su method naming. Replace with `ssh', instead. + (External transfer methods, Auto-save and Backup): + Typo fixes. + +2003-11-02 Michael Albinus <Michael.Albinus@alcatel.de> + + * tramp.texi (all): Harmonize all occurences of @tramp{}. + (Top): Mention japanese manual only if flag `jamanual' is set. + Insert section `Japanese manual' in menu. + +2003-11-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * frames.texi (Dialog Boxes): Add use-file-dialog. + +2003-11-26 Thien-Thi Nguyen <ttn@gnu.org> + + * eshell.texi (Known Problems): Add doc item. + +2003-11-22 Martin Stjernholm <bug-cc-mode@gnu.org> + + * ack.texi: Note that Alan Mackenzie contributed the AWK support + in CC Mode. + +2003-11-22 Martin Stjernholm <bug-cc-mode@gnu.org> + + * cc-mode.texi: Update for CC Mode 5.30. + + Note: Please refrain from doing purely cosmetic changes like + removing trailing whitespace in this manual; it clobbers cvs + merging for no good reason. + +2003-11-02 Jesper Harder <harder@ifa.au.dk> (tiny change) + + * man/ack.texi, man/basic.texi, man/cmdargs.texi: + * man/commands.texi, man/custom.texi, man/display.texi: + * man/ediff.texi, man/emacs.texi, man/faq.texi, man/files.texi: + * man/frames.texi, man/glossary.texi, man/killing.texi: + * man/macos.texi, man/mark.texi, man/misc.texi, man/msdog.texi: + * man/mule.texi, man/rmail.texi, man/search.texi: + * man/sending.texi, man/text.texi, man/tramp.texi: + * man/trouble.texi, man/vip.texi, man/viper.texi, man/widget.texi: + * man/woman.texi: Replace @sc{ascii} and ASCII with @acronym{ASCII}. + +2003-11-01 Alan Mackenzie <acm@muc.de> + + * search.texi (Scrolling During Incremental Search): Document a + new scrolling facility in isearch mode. + +2003-10-26 Karl Berry <karl@gnu.org> + + * info.texi (Info Search): Echo area, not echo are. From Debian + diff. + +2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk> + + * widget.texi (Defining New Widgets): Document new beavior of + :buttons and :children keywords. + +2003-10-22 Miles Bader <miles@gnu.org> + + * Makefile.in (info): Move before $(top_srcdir)/info. + +2003-10-22 Nick Roberts <nick@nick.uklinux.net> + + * building.texi (Watch Expressions): Update section on data display + to reflect code changes (GDB Graphical Interface). + +2003-10-17 Thien-Thi Nguyen <ttn@gnu.org> + + * tramp.texi (Inline methods): Small grammar fix. + (External transfer methods): Likewise. + +2003-10-13 Richard M. Stallman <rms@gnu.org> + + * xresources.texi (GTK resources): Clean up previous change. + +2003-10-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * xresources.texi (GTK resources): Add a note that some themes + disallow customizations. Add scroll theme example. + +2003-10-08 Nick Roberts <nick@nick.uklinux.net> + + * speedbar.texi: Remove paragraph for GUD that is no longer true. + +2003-10-06 Luc Teirlinck <teirllm@auburn.edu> + + * texinfo.tex: Replace `%' in arch tagline by @ignore. + +2003-09-30 Richard M. Stallman <rms@gnu.org> + + * dired-x.texi (Miscellaneous Commands): Delete M-g, w, T. + + * widget.texi (User Interface): Fix typos. + + * pcl-cvs.texi, cl.texi, woman.texi, ediff.texi: Fix @strong{Note:}. + + * cmdargs.texi (General Variables): Remove MAILRC envvar. + + * misc.texi (Saving Emacs Sessions): Shorten the section, + collapsing back into one node. + +2003-09-30 Lars Hansen <larsh@math.ku.dk> + + * misc.texi: Section "Saving Emacs Sessions" rewritten. + +2003-09-29 Jan Dj,Ad(Brv. <jan.h.d@swipnet.se> + + * xresources.texi (GTK names in Emacs): Correct typo. + +2003-09-29 Thien-Thi Nguyen <ttn@gnu.org> + + * pcl-cvs.texi (Selected Files): Fix typo. + +2003-09-24 Luc Teirlinck <teirllm@mail.auburn.edu> + + * cmdargs.texi (Font X): Mention new default font. More + fully describe long font names, wildcard patterns and the + problems involved. (Result of discussion on emacs-devel.) + +2003-09-22 Luc Teirlinck <teirllm@mail.auburn.edu> + + * emacs.texi (Acknowledgements): Correct typo. + +2003-09-22 Richard M. Stallman <rms@gnu.org> + + * dired.texi (Misc Dired Commands): New node. + (Dired Navigation): Add dired-goto-file. + + * files.texi (File Aliases, Misc File Ops): Add @cindex entries. + + * emacs.texi (Acknowledgements): New node, split from Distribution. + + * cmdargs.texi (Action Arguments): -f reads interactive args. + +2003-09-21 Karl Berry <karl@gnu.org> + + * info.texi (] and [ commands): No period at end of section title. + +2003-09-08 Lute Kamstra <lute@gnu.org> + + * screen.texi (Mode Line): Say that POS comes before LINE. + Mention `size-indication-mode'. + * display.texi (Optional Mode Line): Document + `size-indication-mode'. + * basic.texi (Position Info): Mention `size-indication-mode'. + +2003-09-07 Luc Teirlinck <teirllm@mail.auburn.edu> + + * xresources.texi (Resources): Refer to `editres' man page. + (Lucid Resources): Update defaults. Expand description of + `shadowThickness'. + +2003-09-04 Miles Bader <miles@gnu.org> + + * Makefile.in (top_srcdir): New variable. + ($(top_srcdir)/info): New rule. + (info): Depend on it. + +2003-09-03 Peter Runestig <peter@runestig.com> + + * makefile.w32-in: New file. + +2003-08-29 Richard M. Stallman <rms@gnu.org> + + * misc.texi (Saving Emacs Sessions): Correct previous change. + +2003-08-26 Per Abrahamsen <abraham@dina.kvl.dk> + + * widget.texi (User Interface): Explain the need of static text + around an editable field. + +2003-08-19 Luc Teirlinck <teirllm@mail.auburn.edu> + + * widget.texi (Basic Types): The argument to `:help-echo' can now + be a form that evaluates to a string. + + * emacs.texi (Top): Update menu to reflect new Keyboard Macros chapter. + (Intro): Include kmacro.texi after fixit.texi instead of after + custom.texi. (As suggested by Kim Storm.) + +2003-08-18 Luc Teirlinck <teirllm@mail.auburn.edu> + + * fixit.texi (Fixit): Update `Next' pointer. + * files.texi (Files): Update `Previous' pointer. + * kmacro.texi (Keyboard Macros): Remove redundant node and section. + * emacs.texi (Intro): Include kmacro.texi after custom.texi. + (Suggested by Kim Storm.) + * Makefile (EMACSSOURCES): Add kmacro.texi. (Suggested by Kim Storm.) + +2003-08-18 Kim F. Storm <storm@cua.dk> + + * kmacro.texi: New file describing enhanced keyboard macro + functionality. Replaces old description in custom.texi. + + * custom.texi (Customization): Add xref to Keyboard Macros chapter. + (Keyboard Macros): Move to new kmacro.texi file. + + * emacs.texi (Keyboard Macros): Reference new keyboard macro topics. + + * calc.texi (Queries in Macros): Update xref to keyboard macro query. + +2003-08-17 Edward M. Reingold <reingold@emr.cs.iit.edu> + + * calendar.texi (Specified Dates): Add `calendar-goto-day-of-year'. + +2003-08-17 Alex Schroeder <alex@gnu.org> + + * misc.texi (Saving Emacs Sessions): Manual M-x desktop-save not + required. + +2003-08-16 Richard M. Stallman <rms@gnu.org> + + * dired-x.texi (Shell Command Guessing): Explain *. + +2003-08-16 Chunyu Wang <spr@db.cs.hit.edu.cn> (tiny change) + + * pcl-cvs.texi (Log Edit Mode): Fix key binding for + log-edit-insert-changelog. + +2003-08-05 Richard M. Stallman <rms@gnu.org> + + * programs.texi (Lisp Indent): Don't describe + lisp-indent-function property here. Use xref to Lisp Manual. + +2003-08-03 Karl Berry <karl@gnu.org> + + * info.texi: Need @contents. + +2003-08-03 Glenn Morris <gmorris@ast.cam.ac.uk> + + * calendar.texi (Date Formats): Document changed behaviour of + abbreviations. + +2003-07-24 Markus Rost <rost@math.ohio-state.edu> + + * buffers.texi (List Buffers): Fix previous change. + +2003-07-20 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net> + + Tramp version 2.0.36 released. + + * tramp.texi (Remote shell setup): Explain about problems with + non-Bourne commands in ~/.profile and ~/.shrc. + +2003-07-13 Markus Rost <rost@math.ohio-state.edu> + + * buffers.texi (List Buffers): Adjust to new format of *Buffer + List*. + +2003-07-07 Luc Teirlinck <teirllm@mail.auburn.edu> + + * info.texi (Help-Inv, Help-M, Help-Xref): Update following + renaming of `vis-mode' to `visible-mode'. + + * display.texi (Font Lock): Fix typo. + +2003-07-07 Richard M. Stallman <rms@gnu.org> + + * display.texi (Font Lock): Add xref for format info on + font-lock-remove-keywords. + + * building.texi (Compilation): Document what happens with asynch + children of compiler process. + + * help.texi (Library Keywords): Use @multitable. + +2003-07-04 Luc Teirlinck <teirllm@mail.auburn.edu> + + * info.texi (Top, Help-Small-Screen): Remove accidentally added + next, prev and up pointers. + +2003-07-02 Luc Teirlinck <teirllm@mail.auburn.edu> + + * info.texi (Help): Mention existence of Emacs and stand-alone + Info at the very beginning of the tutorial. + (Help-Inv): New node. + (Help-]): New node. + (Help-M): Systematically point out the differences between default + Emacs and stand-alone versions. Delete second menu. + (Help-Xref): Systematically point out the differences between + default Emacs and stand-alone versions. + (Help-Int): Change `l' example. + (Expert Info): Fix typos. + (Emacs Info Variables): Mention `Info-hide-note-references' and + new default for `Info-scroll-prefer-subnodes'. + +2003-06-17 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net> + + Version 2.0.35 of Tramp released. + + * tramp.texi: From Michael Albinus <Michael.Albinus@alcatel.de>: + (Inline methods): Add methods `remsh' and `plink1'. + (External transfer methods): Add method `remcp'. + (Multi-hop Methods): Add method `remsh'. + Small patch from Adrian Aichner <adrian@xemacs.org>: + Fix minor typos. + (Concept Index): Added to make manual searchable via + `Info-index'. + (Version Control): Add cindex entry. + +2003-06-04 Richard M. Stallman <rms@gnu.org> + + * programs.texi (Expressions): Delete C-M-DEL. + + * misc.texi (Shell Options): Clarify comint-scroll-show-maximum-output. + comint-move-point-for-output renamed from + comint-scroll-to-bottom-on-output. + + * custom.texi (Init Rebinding): Replace previous change with xref. + (Non-ASCII Rebinding): Explain that issue more briefly here. + +2003-05-28 Richard M. Stallman <rms@gnu.org> + + * indent.texi (Indentation): Condense, simplify, clarify prev change. + +2003-05-28 Nick Roberts <nick@nick.uklinux.net> + + * building.texi (GDB Graphical Interface): New node. + (Rewritten somewhat by RMS.) + +2003-05-28 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net> + + * custom.texi (Init Rebinding): Xref Non-ASCII Rebinding, for + non-English letters. Explain how to set coding systems correctly + and how to include the right coding cookie in the file. + +2003-05-24 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net> + + * trampver.texi: Version 2.0.34 released. + +2003-05-22 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net> + + * indent.texi (Indentation): Explain the concepts. + (Just Spaces): Explain why preventing tabs for indentation might + be useful. + +2003-05-03 Glenn Morris <gmorris@ast.cam.ac.uk> + + * faq.texi: Improve previous changes. + +2003-05-02 Glenn Morris <gmorris@ast.cam.ac.uk> + + * faq.texi: Update copyright and maintenance details. + Update some package URLs, versions, and maintainers. + Remove many references to the Emacs Lisp Archive. + +2003-04-23 Simon Josefsson <jas@extundo.com> + + * smtpmail.texi: Fix license (the invariant sections mentioned has + never been part of the smtp manual). Align info dir entry with + other emacs packages. + +2003-04-16 Richard M. Stallman <rms@gnu.org> + + * search.texi (Regexps): Ref to Lisp manual for more regexp features. + +2003-04-08 Michael Albinus <Michael.Albinus@alcatel.de> + + * tramp.texi: Version 2.0.33 released. + Remove installation chapter. Remove XEmacs specifics. + +2003-03-29 Richard M. Stallman <rms@gnu.org> + + * tramp.texi (Top): Undo the previous renaming. + (emacs-other-name, emacs-other-dir, emacs-other-file-name): Delete. + +2003-03-29 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net> + + * Makefile.in (../info/tramp): Compile Emacs, instead of XEmacs, + version of manual. + + * tramp.texi (Auto-save and Backup): New node. + +2003-03-29 Michael Albinus <Michael.Albinus@alcatel.de> + + * tramp.texi (Top): Include trampver.texi. Rename "Emacs" to "GNU + Emacs" in order to have better differentiation to "XEmacs". + `emacs-other-name', `emacs-other-dir' and `emacs-other-file-name' + are new macros in order to point to the other Emacs flavor where + appropriate. In info case, point to node `Installation' in order + to explain how to generate the other way. In html case, make a + link to the other html file. + (Obtaining TRAMP): Added a paragraph saying to perform `autoconf' + after CVS checkout/update. + (Installation): Completely rewritten. + (Installation parameters, Load paths): New sections under + `Installation'. + +2003-02-28 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de> + + * tramp.texi: Version 2.0.30 released. + Replace word "path" with "localname" where used as a component of + a Tramp file name. + +2003-02-28 Michael Albinus <Michael.Albinus@alcatel.de> + + * tramp.texi (Frequently Asked Questions): `tramp-chunksize' + introduced. + (Installation): Explain what to do if files from the tramp/contrib + directory are needed. + +2003-02-23 Alex Schroeder <alex@emacswiki.org> + + * smtpmail.texi (How Mail Works): New. + +2003-02-22 Alex Schroeder <alex@emacswiki.org> + + * cmdargs.texi (General Variables): Document SMTPSERVER. + + * smtpmail.texi: New file. + + * sending.texi: Remove SMTP node. + (Mail Sending): Describe `send-mail-function'. Link to SMTP + library. + + * Makefile.in: Build SMTP manual. + +2003-02-22 Alex Schroeder <alex@emacswiki.org> + + * sending.texi (Sending via SMTP): Explain MTA/MUA. + +2003-02-22 Simon Josefsson <jas@extundo.com> + + * sending.texi (Mail Methods): Add node about SMTP. + +2003-02-17 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * xresources.texi (GTK names in Emacs): Add emacs-toolbar - GtkToolbar. + +2003-02-05 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de> + + * tramp.texi: Version 2.0.29 released. + (Installation): In Emacs, use M-x texinfo-format-buffer RET, not + M-x makeinfo-buffer RET. Reported by gebser@ameritech.net. + +2003-02-01 Michael Albinus <Michael.Albinus@alcatel.de> + + * tramp.texi (Frequently Asked Questions): Explain a workaround if + another package loads accidently Ange-FTP. + +2003-01-24 Michael Albinus <Michael.Albinus@alcatel.de> + + * tramp.texi (Customizing Completion): Add function + `tramp-parse-sconfig'. Change example of + `tramp-set-completion-function', because parsing of ssh config + files looks more natural. + +2003-02-01 Kevin Ryde <user42@zip.com.au> + + * glossary.texi (Glossary): Correction to cl cross reference. + +2003-01-20 Richard M. Stallman <rms@gnu.org> + + * killing.texi (Rectangles): Document C-x c r. + +2003-01-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * xresources.texi (GTK resources): New node. + (GTK widget names): New node. + (GTK names in Emacs): New node. + (GTK styles): New node. + +2003-01-15 ShengHuo ZHU <zsh@cs.rochester.edu> + + * gnus.texi: Do not use `path' in several locations. + +2003-01-09 Francesco Potort,Al(B <pot@gnu.org> + + * maintaining.texi (Create Tags Table): Add reference to the new + `etags --help --lang=LANG' option. + +2002-12-26 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de> + + * tramp.texi (External transfer methods): New method `smb'. From + Michael Albinus. + +2002-11-05 Karl Berry <karl@gnu.org> + + * info.texi (Info-fontify): Reorder face list to avoid bad line + breaks. + +2002-10-06 Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> + + * tramp.texi: Move @copying to standard place. Use + @insertcopying. + +2002-10-02 Karl Berry <karl@gnu.org> + + * (ada-mode.texi autotype.texi calc.texi cc-mode.texi cl.texi + dired-x.texi ebrowse.texi ediff.texi emacs-mime.texi emacs.texi + eshell.texi eudc.texi faq.texi forms.texi idlwave.texi info.texi + message.texi mh-e.texi pcl-cvs.texi reftex.texi sc.texi ses.texi + speedbar.texi vip.texi viper.texi widget.texi woman.texi): + Per rms, update all manuals to use @copying instead of @ifinfo. + Also use @ifnottex instead of @ifinfo around the top node, where + needed for the sake of the HTML output. + (The Gnus manual is not fixed since it's not clear to me how it + works; and the Tramp manual already uses @copying, although in an + unusual way. All others were changed.) + +2002-09-10 Jonathan Yavner <jyavner@engineer.com> + + * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add SES. + (../info/ses, ses.dvi): New targets. + * ses.texi: New file. + +2002-09-06 Pavel Jan,Am(Bk <Pavel@Janik.cz> + + * texinfo.tex: Update to texinfo 4.2. + +2002-08-27 Carsten Dominik <dominik@sand.science.uva.nl> + + * reftex.texi: Update to RefTeX 4.19. + +2002-06-17 Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> + + * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add Tramp. + (../info/tramp, tramp.dvi): New targets. + +2002-01-04 Eli Zaretskii <eliz@is.elta.co.il> + + * Makefile.in (DVI_TARGETS): Add calc.dvi. + (calc.dvi): Uncomment. + +2001-12-20 Eli Zaretskii <eliz@is.elta.co.il> + + * Makefile.in (EMACSSOURCES): Update the list of Emacs manual + source files. + +2001-11-16 Eli Zaretskii <eliz@is.elta.co.il> + + * Makefile.in (emacsman): New target. + +2001-11-07 Eli Zaretskii <eliz@is.elta.co.il> + + * Makefile.in (INFO_TARGETS): Add ../info/calc. + (../info/calc): New target. + +2001-10-20 Gerd Moellmann <gerd@gnu.org> + + * (Version 21.1 released.) + +2001-10-05 Gerd Moellmann <gerd@gnu.org> + + * Branch for 21.1. + +2001-04-14 Eli Zaretskii <eliz@is.elta.co.il> + + * Makefile.in (../info/info): Use an explicit -o switch to + makeinfo. + +2001-03-05 Gerd Moellmann <gerd@gnu.org> + + * Makefile.in (mostlyclean, maintainer-clean): Delete more files. + +2000-12-20 Eli Zaretskii <eliz@is.elta.co.il> + + * Makefile.in (../info/idlwave): Use --no-split. + +2000-12-14 Dave Love <fx@gnu.org> + + * Makefile.in (mostlyclean): Remove gnustmp.* + (gnus.dvi): Change rule to remove @latex stuff. + +2000-10-19 Eric M. Ludlam <zappo@ultranet.com> + + * Makefile.in (Speedbar): Add build targets for speedbar.texi. + +2000-10-13 John Wiegley <johnw@gnu.org> + + * Makefile.in: Add build targets for eshell.texi. + +2000-09-25 Gerd Moellmann <gerd@gnu.org> + + * Makefile.in: Remove/comment speedbar stuff. + +2000-09-22 Dave Love <fx@gnu.org> + + * Makefile.in: Add emacs-mime. + +2000-08-08 Eli Zaretskii <eliz@is.elta.co.il> + + * Makefile.in (INFO_TARGETS): Add ../info/woman. + (DVI_TARGETS): Add woman.dvi. + (../info/woman, woman.dvi): New targets. + +2000-05-31 Stefan Monnier <monnier@cs.yale.edu> + + * .cvsignore (*.tmp): New entry. Seems to be used for @macro. + + * pcl-cvs.texi: New file. + * Makefile.in (INFO_TARGETS, DVI_TARGETS: Add pcl-cvs. + (../info/pcl-cvs, pcl-cvs.dvi): New targets. + +2000-05-11 Gerd Moellmann <gerd@gnu.org> + + * Makefile.in (INFO_TARGETS): Add info/ebrowse. + (../info/ebrowse, ebrowse.dvi): New targets. + +2000-01-13 Gerd Moellmann <gerd@gnu.org> + + * Makefile.in (INFO_TARGETS): Add eudc. + (DVI_TARGETS): Add eudc.dvi. + (../info/eudc, eudc.dvi): New targets. + +2000-01-05 Eli Zaretskii <eliz@is.elta.co.il> + + * Makefile.in (INFO_TARGETS): Rename emacs-faq to efaq (for + compatibility with 8+3 filesystems). + (../info/efaq): Rename from emacs-faq. + +2000-01-03 Eli Zaretskii <eliz@is.elta.co.il> + + * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add idlwave. + (../info/idlwave, idlwave.dvi): New targets. + +1999-10-23 Dave Love <fx@gnu.org> + + * Makefile.in: Use autotype.texi. + +1999-10-12 Stefan Monnier <monnier@cs.yale.edu> + + * Makefile.in (faq): Use ../info/emacs-faq.info (as specified in the + faq.texi file) rather than ../info/faq. + +1999-10-07 Gerd Moellmann <gerd@gnu.org> + + * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add ada-mode. + (../info/ada-mode, ada-mode.dvi): New targets. + +1999-09-01 Dave Love <fx@gnu.org> + + * Makefile.in: Add faq. + +1999-07-12 Richard Stallman <rms@gnu.org> + + * Version 20.4 released. + +1998-12-04 Markus Rost <rost@delysid.gnu.org> + + * Makefile.in (INFO_TARGETS): Delete customize.info. + (DVI_TARGETS): Delete customize.dvi. + (../info/customize, customize.dvi): Targets deleted. + +1998-08-19 Richard Stallman <rms@psilocin.ai.mit.edu> + + * Version 20.3 released. + +1998-05-06 Richard Stallman <rms@psilocin.gnu.org> + + * Makefile.in (EMACSSOURCES): Add mule.texi. + Add msdog.texi, ack.texi. Remove gnu1.texi. + +1998-04-06 Andreas Schwab <schwab@gnu.org> + + * Makefile.in (ENVADD): Enviroment vars to pass to texi2dvi. Use + it in dvi targets. + (../etc/GNU): Change to $(srcdir) first. + +1998-03-11 Carsten Dominik <cd@delysid.gnu.org> + + * reftex.texi: Update for RefTeX version 3.22. + +1998-02-08 Richard Stallman <rms@psilocin.gnu.org> + + * Makefile.in (reftex.dvi, ../info/reftex): New targets. + (INFO_TARGETS, DVI_TARGETS): Add the new targets. + +1997-09-23 Paul Eggert <eggert@twinsun.com> + + * Makefile.in: Merge changes mistakenly made to `Makefile'. + (INFO_TARGETS): Change ../info/custom to ../info/customize. + (../info/customize): Rename from ../info/custom. + (../info/viper, viper.dvi): Remove dependency on viper-cmd.texi. + +1997-09-19 Richard Stallman <rms@psilocin.gnu.ai.mit.edu> + + * Version 20.2 released. + +1997-09-15 Richard Stallman <rms@psilocin.gnu.ai.mit.edu> + + * Version 20.1 released. + +1997-08-24 Richard Stallman <rms@psilocin.gnu.ai.mit.edu> + + * Makefile (../info/customize, customize.dvi): New targets. + (INFO_TARGETS): Add ../info/customize. + (DVI_TARGETS): Add customize.dvi. + +1997-07-10 Richard Stallman <rms@psilocin.gnu.ai.mit.edu> + + * Makefile (../info/viper, viper.dvi): Delete viper-cmd.texi dep. + +1996-08-11 Richard Stallman <rms@psilocin.gnu.ai.mit.edu> + + * Version 19.33 released. + +1996-07-31 Richard Stallman <rms@psilocin.gnu.ai.mit.edu> + + * Version 19.32 released. + +1996-06-27 Lars Magne Ingebrigtsen <larsi@ifi.uio.no> + + * Makefile.in: Add rules for the Message manual. + +1996-06-26 Lars Magne Ingebrigtsen <larsi@ifi.uio.no> + + * gnus.texi: New version. + + * message.texi: New manual. + +1996-06-20 Richard Stallman <rms@psilocin.gnu.ai.mit.edu> + + * Makefile.in (All info targets): cd $(srcdir) to do the work. + +1996-06-19 Richard Stallman <rms@psilocin.gnu.ai.mit.edu> + + * Makefile.in (All info targets): Specify $(srcdir) in input files. + Specify -I option. + (All dvi targets): Set the TEXINPUTS variable. + +1996-05-25 Karl Heuer <kwzh@gnu.ai.mit.edu> + + * Version 19.31 released. + +1996-01-07 Richard Stallman <rms@whiz-bang.gnu.ai.mit.edu> + + * Makefile.in (../info/ccmode): Rename from ../info/cc-mode. + (INFO_TARGETS): Use new name. This avoids name conflict on MSDOS. + +1995-11-29 Richard Stallman <rms@mole.gnu.ai.mit.edu> + + * Makefile.in (../info/cc-mode, cc-mode.dvi): New targets. + (INFO_TARGETS): Add ../info/cc-mode. + (DVI_TARGETS): Add cc-mode.dvi. + +1995-11-24 Richard Stallman <rms@mole.gnu.ai.mit.edu> + + * Version 19.30 released. + +1995-11-04 Lars Magne Ingebrigtsen <larsi@ifi.uio.no> + + * gnus.texi: New file. + +1995-11-04 Erik Naggum <erik@naggum.no> + + * gnus.texi: File deleted. + +1995-11-02 Stephen Gildea <gildea@stop.mail-abuse.org> + + * mh-e.texi: "Function Index" -> "Command Index" to work with + Emacs 19.30 C-h C-k support of separately-documented commands. + +1995-06-26 Richard Stallman <rms@mole.gnu.ai.mit.edu> + + * Makefile.in (../info/ediff, ediff.dvi): New targets. + (INFO_TARGETS, DVI_TARGETS): Add those new targets. + +1995-04-24 Richard Stallman <rms@mole.gnu.ai.mit.edu> + + * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add viper targets. + (../info/viper, viper.dvi): New targets. + +1995-04-20 Kevin Rodgers <kevinr@ihs.com> + + * dired-x.texi (Installation): Change the example to set + buffer-local variables like dired-omit-files-p in + dired-mode-hook. + +1995-04-17 Richard Stallman <rms@mole.gnu.ai.mit.edu> + + * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add mh-e targets. + (../info/mh-e, mh-e.dvi): New targets. + +1995-02-07 Richard Stallman <rms@pogo.gnu.ai.mit.edu> + + * Makefile.in (maintainer-clean): Rename from realclean. + +1994-11-23 Richard Stallman <rms@mole.gnu.ai.mit.edu> + + * Makefile.in: New file. + * Makefile: File deleted. + +1994-11-19 Richard Stallman <rms@mole.gnu.ai.mit.edu> + + * Makefile (TEXINDEX_OBJS): Variable deleted. + (texindex, texindex.o, getopt.o): Rules deleted. + All deps on texindex deleted. + (distclean): Don't delete texindex. + (mostlyclean): Don't delete *.o. + * texindex.c, getopt.c: Files deleted. + +1994-09-07 Richard Stallman <rms@mole.gnu.ai.mit.edu> + + * Version 19.26 released. + +1994-07-02 Richard Stallman (rms@gnu.ai.mit.edu) + + * Makefile (EMACSSOURCES): Exclude undo.texi. + +1994-05-30 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.25 released. + +1994-05-23 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.24 released. + +1994-05-16 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.23 released. + +1994-04-17 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile: Delete spurious tab. + +1994-02-16 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile (.SUFFIXES): New rule. + +1994-01-15 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile (dired-x.dvi, ../info/dired-x): New targets. + (INFO_TARGETS, DVI_TARGETS): Add the new targets. + +1994-01-08 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile (../info/sc): Rename frin sc.info. + (../info/cl): Likewise. + (INFO_TARGETS): Use new names. + +1993-12-04 Richard Stallman (rms@srarc2) + + * getopt.c: New file. + * Makefile (TEXINDEX_OBJS): Use getopt.o in this dir, not ../lib-src. + (getopt.o): New rule. + (dvi): Don't depend on texindex. + (emacs.dvi, cl.dvi, forms.dvi, vip.dvi, gnus.dvi, sc.dvi): + Depend on texindex. + +1993-12-03 Richard Stallman (rms@srarc2) + + * Makefile (../info/sc.info): Rename from ../info/sc. + (TEXI2DVI): New variable. + (emacs.dvi, cl.dvi forms.dvi, sc.dvi, vip.dvi, gnus.dvi, info.dvi): + Add explicit commands. + (TEXINDEX_OBJS): Delete duplicate getopt.o. + +1993-11-27 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.22 released. + +1993-11-18 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile (TEXINDEX_OBJS): Delete spurious period. + +1993-11-16 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.21 released. + +1993-11-15 Paul Eggert (eggert@twinsun.com) + + * man/Makefile (../info/cl.info): Rename from ../info/cl. + +1993-11-15 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile (../etc/GNU): New target. + (EMACSSOURCES): Add gnu1.texi. + +1993-11-14 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile (realclean): Don't delete the Info files. + +1993-10-25 Brian Fox (bfox@albert.gnu.ai.mit.edu) + + * forms.texi: Fix forms.texi so that it will format correctly. + Add missing `@end iftex', fix bad reference. + + * info.texi, info-stn.texi: New files implement texinfo version of + `info' file. + + * frames.texi (Creating Frames): Mention `C-x 5' instead of `C-x + 4' where appropriate. + +1993-10-20 Brian Fox (bfox@ai.mit.edu) + + * Makefile: Fix targets for texindex, new info.texi files. + * info-stnd.texi: New file implements info for standalone info + reader. + * info.texi: Update to include recent changes to "../info/info". + New source file for ../info/info; includes info-stnd.texi. + + * texindex.c: Include "../src/config.h" if building in emacs. + + * Makefile: Change all files to FILENAME.texi, force all targets + to be FILENAME, not FILENAME.info. This changes sc.texinfo, + vip.texinfo, forms.texinfo, cl.texinfo. + Add target to build texindex.c, defining `emacs'. + + * forms.texi: Install new file to match version 2.3 of forms.el. + +1993-08-14 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.19 released. + +1993-08-10 Simon Leinen (simon@lia.di.epfl.ch) + + * sc.texinfo: Fix info file name. + + * Makefile (info): Add gnus and sc. + (dvi): Add gnus.dvi and sc.dvi. + (../info/sc, sc.dvi): New targets. + +1993-08-08 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.18 released. + +1993-07-20 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile: Fix source file names of the separate manuals. + (gnus.dvi, ../info/gnus): New targets. + +1993-07-18 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.17 released. + +1993-07-10 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * split-man: Fix typos in last change. + +1993-07-06 Jim Blandy (jimb@geech.gnu.ai.mit.edu) + + * Version 19.16 released. + +1993-06-19 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * version 19.15 released. + +1993-06-18 Jim Blandy (jimb@geech.gnu.ai.mit.edu) + + * Makefile (distclean): It's rm, not rf. + +1993-06-17 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Version 19.14 released. + +1993-06-16 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Makefile: New file. + +1993-06-08 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Version 19.13 released. + +1993-05-27 Jim Blandy (jimb@geech.gnu.ai.mit.edu) + + * Version 19.9 released. + +1993-05-25 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Version 19.8 released. + +1993-05-25 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * cmdargs.texi: Document the -i, -itype, and -iconic options. + + * trouble.texi: It's `enable-flow-control-on', not + `evade-flow-control-on'. + +1993-05-24 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * display.texi: Document standard-display-european. + +1993-05-22 Jim Blandy (jimb@geech.gnu.ai.mit.edu) + + * Version 19.7 released. + + * emacs.texi: Add a sentence to the top menu mentioning the + specific version of Emacs this manual applies to. + +1993-04-25 Eric S. Raymond (eric@mole.gnu.ai.mit.edu) + + * basic.texi: Document next-line-add-lines variable used to + implement down-arrow. + + * killing.texi: Document kill-whole-line. + +1993-04-18 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu) + + * text.texi: Update unix TeX ordering information. + +1993-03-26 Eric S. Raymond (eric@geech.gnu.ai.mit.edu) + + * news.texi: Mention fill-rectangle in keybinding list. + + * killing.texi: Document fill-rectangle. + +1993-03-17 Eric S. Raymond (eric@mole.gnu.ai.mit.edu) + + * vc.texi: Bring the docs up to date with VC 5.2. + +1992-01-10 Eric S. Raymond (eric@mole.gnu.ai.mit.edu) + + * emacs.tex: Mention blackbox and gomoku under Amusements. + Assembler mode is now mentioned and appropriately indexed + under Programming Modes. + +1991-02-15 Robert J. Chassell (bob@wookumz.ai.mit.edu) + + * emacs.tex: Update TeX ordering information. + +1990-08-30 David Lawrence (tale@pogo.ai.mit.edu) + + * gnus.texinfo: New file. Removed installation instructions. + +1990-06-26 David Lawrence (tale@geech) + + * emacs.tex: Note that completion-ignored-extensions is not used + to filter out names when all completions are displayed in + *Completions*. + +1990-05-25 Richard Stallman (rms@sugar-bombs.ai.mit.edu) + + * texindex.tex: If USG, include sys/types.h and sys/fcntl.h. + +1990-03-21 Jim Kingdon (kingdon@pogo.ai.mit.edu) + + * emacs.tex: Add @findex grep. + +1989-01-17 Robert J. Chassell (bob@rice-chex.ai.mit.edu) + + * texinfo.tex: Change spelling of `\sc' font to `\smallcaps' and + then define `\sc' as the command for smallcaps in Texinfo. This + means that the @sc command will produce small caps. bfox has + made the corresponding change to makeinfo and texinfm.el. + +1988-08-16 Robert J. Chassell (bob@frosted-flakes.ai.mit.edu) + + * emacs.tex: Correct two typos. No other changes before + Version 19 will be made. + + * vip.texinfo: Remove menu entry Adding Lisp Code in node + Customization since the menu entry did not point to anything. + Also add an @finalout command to remove overfull hboxes from the + printed output. + + * cl.texinfo: Add @bye, \input line and @settitle to file. + This file is clearly intended to be a chapter of some other work, + but the other work does not yet exist. + +1988-07-25 Robert J. Chassell (bob@frosted-flakes.ai.mit.edu) + + * texinfo.texinfo: Three typos corrected. + +1988-05-23 Robert J. Chassell (bob@frosted-flakes.ai.mit.edu) + + * emacs.tex: Update information for obtaining TeX distribution from the + University of Washington. + +;; Local Variables: +;; coding: iso-2022-7bit +;; fill-column: 79 +;; add-log-time-zone-rule: t +;; End: + + Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, + 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + + This file is part of GNU Emacs. + + GNU Emacs is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + GNU Emacs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU Emacs; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + +;;; arch-tag: f1d62776-3ed5-4811-9d96-267252577dbd diff --git a/doc/emacs/Makefile.in b/doc/emacs/Makefile.in new file mode 100644 index 00000000000..00088b74b51 --- /dev/null +++ b/doc/emacs/Makefile.in @@ -0,0 +1,368 @@ +#### Makefile for the Emacs Manual and other documentation. + +# Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, +# 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + +# This file is part of GNU Emacs. + +# GNU Emacs is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. + +# GNU Emacs is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with GNU Emacs; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. + +# Where to find the source code. $(srcdir) will be the man +# subdirectory of the source tree. This is +# set by the configure script's `--srcdir' option. +srcdir=@srcdir@ +top_srcdir=@top_srcdir@ + +# Tell make where to find source files; this is needed for the makefiles. +VPATH=@srcdir@ + + +# The makeinfo program is part of the Texinfo distribution. +# Use --force so that it generates output even if there are errors. +MAKEINFO = makeinfo --force +INFO_TARGETS = ../info/emacs ../info/ccmode ../info/cl \ + ../info/dired-x ../info/ediff ../info/forms ../info/gnus \ + ../info/message ../info/sieve ../info/pgg ../info/emacs-mime \ + ../info/info ../info/mh-e ../info/reftex \ + ../info/sc ../info/vip ../info/viper ../info/widget \ + ../info/efaq ../info/ada-mode ../info/autotype ../info/calc \ + ../info/idlwave ../info/eudc ../info/ebrowse ../info/pcl-cvs \ + ../info/woman ../info/eshell ../info/org ../info/url \ + ../info/speedbar ../info/tramp ../info/ses ../info/smtpmail \ + ../info/flymake ../info/newsticker ../info/rcirc ../info/erc +DVI_TARGETS = emacs.dvi calc.dvi cc-mode.dvi cl.dvi dired-x.dvi \ + ediff.dvi forms.dvi gnus.dvi message.dvi emacs-mime.dvi \ + gnus.dvi message.dvi sieve.dvi pgg.dvi mh-e.dvi \ + reftex.dvi sc.dvi vip.dvi viper.dvi widget.dvi faq.dvi \ + ada-mode.dvi autotype.dvi idlwave.dvi eudc.dvi ebrowse.dvi \ + pcl-cvs.dvi woman.dvi eshell.dvi org.dvi url.dvi \ + speedbar.dvi tramp.dvi ses.dvi smtpmail.dvi flymake.dvi \ + newsticker.dvi emacs-xtra.dvi rcirc.dvi erc.dvi +INFOSOURCES = info.texi + +# The following rule does not work with all versions of `make'. +.SUFFIXES: .texi .dvi +.texi.dvi: + texi2dvi $< + +TEXI2DVI = texi2dvi +ENVADD = TEXINPUTS="$(srcdir):$(TEXINPUTS)" MAKEINFO="$(MAKEINFO) -I$(srcdir)" + +EMACS_XTRA=\ + $(srcdir)/arevert-xtra.texi \ + $(srcdir)/cal-xtra.texi \ + $(srcdir)/dired-xtra.texi \ + $(srcdir)/picture-xtra.texi \ + $(srcdir)/emerge-xtra.texi \ + $(srcdir)/vc-xtra.texi \ + $(srcdir)/vc1-xtra.texi \ + $(srcdir)/vc2-xtra.texi \ + $(srcdir)/fortran-xtra.texi \ + $(srcdir)/msdog-xtra.texi + +EMACSSOURCES= \ + ${srcdir}/emacs.texi \ + ${srcdir}/doclicense.texi \ + ${srcdir}/gpl.texi \ + ${srcdir}/screen.texi \ + ${srcdir}/commands.texi \ + ${srcdir}/entering.texi \ + ${srcdir}/basic.texi \ + ${srcdir}/mini.texi \ + ${srcdir}/m-x.texi \ + ${srcdir}/help.texi \ + ${srcdir}/mark.texi \ + ${srcdir}/killing.texi \ + ${srcdir}/regs.texi \ + ${srcdir}/display.texi \ + ${srcdir}/search.texi \ + ${srcdir}/fixit.texi \ + ${srcdir}/files.texi \ + ${srcdir}/buffers.texi \ + ${srcdir}/windows.texi \ + ${srcdir}/frames.texi \ + ${srcdir}/mule.texi \ + ${srcdir}/major.texi \ + ${srcdir}/indent.texi \ + ${srcdir}/text.texi \ + ${srcdir}/programs.texi \ + ${srcdir}/building.texi \ + ${srcdir}/maintaining.texi \ + ${srcdir}/abbrevs.texi \ + ${srcdir}/sending.texi \ + ${srcdir}/rmail.texi \ + ${srcdir}/dired.texi \ + ${srcdir}/calendar.texi \ + ${srcdir}/misc.texi \ + ${srcdir}/custom.texi \ + ${srcdir}/trouble.texi \ + ${srcdir}/cmdargs.texi \ + ${srcdir}/xresources.texi \ + ${srcdir}/anti.texi \ + ${srcdir}/macos.texi \ + ${srcdir}/msdog.texi \ + ${srcdir}/gnu.texi \ + ${srcdir}/glossary.texi \ + ${srcdir}/ack.texi \ + ${srcdir}/kmacro.texi \ + $(EMACS_XTRA) + +info: $(top_srcdir)/info $(INFO_TARGETS) + +$(top_srcdir)/info: + mkdir $@ + +dvi: $(DVI_TARGETS) + +# Note that all the Info targets build the Info files +# in srcdir. There is no provision for Info files +# to exist in the build directory. +# In a distribution of Emacs, the Info files should be up to date. + +# The following target uses an explicit -o switch to work around +# the @setfilename directive in info.texi, which is required for +# the Texinfo distribution. + +../info/info: ${INFOSOURCES} + cd $(srcdir); $(MAKEINFO) --no-split info.texi -o $@ + +info.dvi: ${INFOSOURCES} + $(ENVADD) $(TEXI2DVI) ${srcdir}/info.texi + +../info/emacs: ${EMACSSOURCES} + cd $(srcdir); $(MAKEINFO) emacs.texi + +emacs.dvi: ${EMACSSOURCES} + $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs.texi + +# This target is here so you could easily get the list of the *.texi +# files which belong to the Emacs manual (as opposed to the separate +# manuals for CL, CC Mode, Ebrowse, etc.). With this target, you can +# say things like "grep foo `make emacsman`". +emacsman: + @echo $(EMACSSOURCES) + +../info/ccmode: cc-mode.texi + cd $(srcdir); $(MAKEINFO) cc-mode.texi +cc-mode.dvi: cc-mode.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/cc-mode.texi + +../info/ada-mode: ada-mode.texi + cd $(srcdir); $(MAKEINFO) ada-mode.texi +ada-mode.dvi: ada-mode.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/ada-mode.texi + +../info/pcl-cvs: pcl-cvs.texi + cd $(srcdir); $(MAKEINFO) pcl-cvs.texi +pcl-cvs.dvi: pcl-cvs.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/pcl-cvs.texi + +../info/eshell: eshell.texi + cd $(srcdir); $(MAKEINFO) eshell.texi +eshell.dvi: eshell.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/eshell.texi + +../info/cl: cl.texi + cd $(srcdir); $(MAKEINFO) cl.texi +cl.dvi: cl.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/cl.texi + +../info/dired-x: dired-x.texi + cd $(srcdir); $(MAKEINFO) dired-x.texi +dired-x.dvi: dired-x.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/dired-x.texi + +../info/ediff: ediff.texi + cd $(srcdir); $(MAKEINFO) ediff.texi +ediff.dvi: ediff.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/ediff.texi + +emacs-xtra.dvi: emacs-xtra.texi $(EMACS_XTRA) + $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-xtra.texi + +../info/forms: forms.texi + cd $(srcdir); $(MAKEINFO) forms.texi +forms.dvi: forms.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/forms.texi + +# gnus/message/emacs-mime/sieve/pgg are part of Gnus: +../info/gnus: gnus.texi gnus-faq.texi + cd $(srcdir); $(MAKEINFO) gnus.texi +gnus.dvi: gnus.texi gnus-faq.texi + sed -e '/@iflatex/,/@end iflatex/d' ${srcdir}/gnus.texi > gnustmp.texi + $(ENVADD) $(TEXI2DVI) gnustmp.texi + cp gnustmp.dvi $*.dvi + rm gnustmp.* + +../info/message: message.texi + cd $(srcdir); $(MAKEINFO) message.texi +message.dvi: message.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/message.texi + +../info/sieve: sieve.texi + cd $(srcdir); $(MAKEINFO) sieve.texi +sieve.dvi: sieve.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/sieve.texi + +../info/emacs-mime: emacs-mime.texi + cd $(srcdir); $(MAKEINFO) --enable-encoding emacs-mime.texi +emacs-mime.dvi: emacs-mime.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-mime.texi + +../info/pgg: pgg.texi + cd $(srcdir); $(MAKEINFO) pgg.texi +pgg.dvi: pgg.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/pgg.texi + +../info/mh-e: mh-e.texi + cd $(srcdir); $(MAKEINFO) mh-e.texi +mh-e.dvi: mh-e.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/mh-e.texi + +../info/reftex: reftex.texi + cd $(srcdir); $(MAKEINFO) reftex.texi +reftex.dvi: reftex.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/reftex.texi + +../info/sc: sc.texi + cd $(srcdir); $(MAKEINFO) sc.texi +sc.dvi: sc.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/sc.texi + +../info/vip: vip.texi + cd $(srcdir); $(MAKEINFO) vip.texi +vip.dvi: vip.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/vip.texi + +../info/viper: viper.texi + cd $(srcdir); $(MAKEINFO) viper.texi +viper.dvi: viper.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/viper.texi + +../info/widget: widget.texi + cd $(srcdir); $(MAKEINFO) widget.texi +widget.dvi: widget.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/widget.texi + +../info/efaq: faq.texi + cd $(srcdir); $(MAKEINFO) faq.texi +faq.dvi: faq.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/faq.texi + +../etc/GNU: gnu1.texi gnu.texi + cd $(srcdir) && makeinfo --no-headers -o ../etc/GNU gnu1.texi + +../info/autotype: autotype.texi + cd $(srcdir); $(MAKEINFO) autotype.texi +autotype.dvi: autotype.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/autotype.texi + +../info/calc: calc.texi + cd $(srcdir); $(MAKEINFO) calc.texi + +calc.dvi: calc.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/calc.texi + +# This is produced with --no-split to avoid making files whose +# names clash on DOS 8+3 filesystems +../info/idlwave: idlwave.texi + cd $(srcdir); $(MAKEINFO) --no-split idlwave.texi +idlwave.dvi: idlwave.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/idlwave.texi + +../info/eudc: eudc.texi + cd $(srcdir); $(MAKEINFO) eudc.texi +eudc.dvi: eudc.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/eudc.texi + +../info/ebrowse: ebrowse.texi + cd $(srcdir); $(MAKEINFO) ebrowse.texi +ebrowse.dvi: ebrowse.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/ebrowse.texi + +../info/woman: woman.texi + cd $(srcdir); $(MAKEINFO) woman.texi +woman.dvi: woman.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/woman.texi + +../info/org: org.texi + cd $(srcdir); $(MAKEINFO) org.texi +org.dvi: org.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/org.texi + +../info/url: url.texi + cd $(srcdir); $(MAKEINFO) url.texi +url.dvi: url.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/url.texi + +../info/speedbar: speedbar.texi + cd $(srcdir); $(MAKEINFO) speedbar.texi +speedbar.dvi: speedbar.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/speedbar.texi + +../info/tramp: tramp.texi trampver.texi + cd $(srcdir); $(MAKEINFO) -D emacs tramp.texi +tramp.dvi: tramp.texi trampver.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/tramp.texi + +../info/ses: ses.texi + cd $(srcdir); $(MAKEINFO) ses.texi +ses.dvi: ses.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/ses.texi + +../info/smtpmail: smtpmail.texi + cd $(srcdir); $(MAKEINFO) smtpmail.texi +smtpmail.dvi: smtpmail.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/smtpmail.texi + +../info/flymake: flymake.texi + cd $(srcdir); $(MAKEINFO) flymake.texi +flymake.dvi: flymake.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/flymake.texi + +../info/newsticker: newsticker.texi + cd $(srcdir); $(MAKEINFO) newsticker.texi +newsticker.dvi: newsticker.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/newsticker.texi + +../info/rcirc: rcirc.texi + cd $(srcdir); $(MAKEINFO) rcirc.texi +rcirc.dvi: rcirc.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/rcirc.texi + +../info/erc: erc.texi + cd $(srcdir); $(MAKEINFO) erc.texi +erc.dvi: erc.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/erc.texi + +mostlyclean: + rm -f *.log *.cp *.fn *.ky *.pg *.vr core *.tp *.core gnustmp.* + +clean: mostlyclean + rm -f *.dvi + +distclean: clean + +maintainer-clean: distclean + rm -f *.aux *.cps *.fns *.kys *.pgs *.vrs *.toc + for file in $(INFO_TARGETS); do rm -f $${file}*; done + + +# Formerly this directory had texindex.c and getopt.c in it +# and this makefile built them to make texindex. +# That caused trouble because this is run entirely in the source directory. +# Since we expect to get texi2dvi from elsewhere, +# it is ok to expect texindex from elsewhere also. diff --git a/doc/emacs/abbrevs.texi b/doc/emacs/abbrevs.texi new file mode 100644 index 00000000000..585e28318e7 --- /dev/null +++ b/doc/emacs/abbrevs.texi @@ -0,0 +1,457 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2001, 2002, 2003, +@c 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Abbrevs +@chapter Abbrevs +@cindex abbrevs +@cindex expansion (of abbrevs) + + A defined @dfn{abbrev} is a word which @dfn{expands}, if you insert +it, into some different text. Abbrevs are defined by the user to expand +in specific ways. For example, you might define @samp{foo} as an abbrev +expanding to @samp{find outer otter}. Then you could insert +@samp{find outer otter } into the buffer by typing @kbd{f o o +@key{SPC}}. + + A second kind of abbreviation facility is called @dfn{dynamic abbrev +expansion}. You use dynamic abbrev expansion with an explicit command +to expand the letters in the buffer before point by looking for other +words in the buffer that start with those letters. @xref{Dynamic +Abbrevs}. + + ``Hippie'' expansion generalizes abbreviation expansion. +@xref{Hippie Expand, , Hippie Expansion, autotype, Features for +Automatic Typing}. + +@menu +* Abbrev Concepts:: Fundamentals of defined abbrevs. +* Defining Abbrevs:: Defining an abbrev, so it will expand when typed. +* Expanding Abbrevs:: Controlling expansion: prefixes, canceling expansion. +* Editing Abbrevs:: Viewing or editing the entire list of defined abbrevs. +* Saving Abbrevs:: Saving the entire list of abbrevs for another session. +* Dynamic Abbrevs:: Abbreviations for words already in the buffer. +* Dabbrev Customization:: What is a word, for dynamic abbrevs. Case handling. +@end menu + +@node Abbrev Concepts +@section Abbrev Concepts + + An @dfn{abbrev} is a word which has been defined to @dfn{expand} into +a specified @dfn{expansion}. When you insert a word-separator character +following the abbrev, that expands the abbrev---replacing the abbrev +with its expansion. For example, if @samp{foo} is defined as an abbrev +expanding to @samp{find outer otter}, then you can insert @samp{find +outer otter.} into the buffer by typing @kbd{f o o .}. + +@findex abbrev-mode +@vindex abbrev-mode +@cindex Abbrev mode +@cindex mode, Abbrev + Abbrevs expand only when Abbrev mode (a minor mode) is enabled. +Disabling Abbrev mode does not cause abbrev definitions to be forgotten, +but they do not expand until Abbrev mode is enabled again. The command +@kbd{M-x abbrev-mode} toggles Abbrev mode; with a numeric argument, it +turns Abbrev mode on if the argument is positive, off otherwise. +@xref{Minor Modes}. @code{abbrev-mode} is also a variable; Abbrev mode is +on when the variable is non-@code{nil}. The variable @code{abbrev-mode} +automatically becomes local to the current buffer when it is set. + + Abbrevs can have @dfn{mode-specific} definitions, active only in one major +mode. Abbrevs can also have @dfn{global} definitions that are active in +all major modes. The same abbrev can have a global definition and various +mode-specific definitions for different major modes. A mode-specific +definition for the current major mode overrides a global definition. + + You can define abbrevs interactively during the editing session. You +can also save lists of abbrev definitions in files for use in later +sessions. Some users keep extensive lists of abbrevs that they load +in every session. + +@node Defining Abbrevs +@section Defining Abbrevs + +@table @kbd +@item C-x a g +Define an abbrev, using one or more words before point as its expansion +(@code{add-global-abbrev}). +@item C-x a l +Similar, but define an abbrev specific to the current major mode +(@code{add-mode-abbrev}). +@item C-x a i g +Define a word in the buffer as an abbrev (@code{inverse-add-global-abbrev}). +@item C-x a i l +Define a word in the buffer as a mode-specific abbrev +(@code{inverse-add-mode-abbrev}). +@item M-x define-global-abbrev @key{RET} @var{abbrev} @key{RET} @var{exp} @key{RET} +Define @var{abbrev} as an abbrev expanding into @var{exp}. +@item M-x define-mode-abbrev @key{RET} @var{abbrev} @key{RET} @var{exp} @key{RET} +Define @var{abbrev} as a mode-specific abbrev expanding into @var{exp}. +@item M-x kill-all-abbrevs +Discard all abbrev definitions, leaving a blank slate. +@end table + +@kindex C-x a g +@findex add-global-abbrev + The usual way to define an abbrev is to enter the text you want the +abbrev to expand to, position point after it, and type @kbd{C-x a g} +(@code{add-global-abbrev}). This reads the abbrev itself using the +minibuffer, and then defines it as an abbrev for one or more words before +point. Use a numeric argument to say how many words before point should be +taken as the expansion. For example, to define the abbrev @samp{foo} as +mentioned above, insert the text @samp{find outer otter} and then type +@kbd{C-u 3 C-x a g f o o @key{RET}}. + + An argument of zero to @kbd{C-x a g} means to use the contents of the +region as the expansion of the abbrev being defined. + +@kindex C-x a l +@findex add-mode-abbrev + The command @kbd{C-x a l} (@code{add-mode-abbrev}) is similar, but +defines a mode-specific abbrev. Mode-specific abbrevs are active only in a +particular major mode. @kbd{C-x a l} defines an abbrev for the major mode +in effect at the time @kbd{C-x a l} is typed. The arguments work the same +as for @kbd{C-x a g}. + +@kindex C-x a i g +@findex inverse-add-global-abbrev +@kindex C-x a i l +@findex inverse-add-mode-abbrev + If the abbrev text itself is already in the buffer, you can use the +commands @kbd{C-x a i g} (@code{inverse-add-global-abbrev}) and +@kbd{C-x a i l} (@code{inverse-add-mode-abbrev}) to define it as an +abbrev by specify the expansion in the minibuffer. These commands are +called ``inverse'' because they invert the meaning of the two text +strings they use (one from the buffer and one read with the +minibuffer). + +@findex define-mode-abbrev +@findex define-global-abbrev + You can define an abbrev without inserting either the abbrev or its +expansion in the buffer using the command @code{define-global-abbrev}. +It reads two arguments---the abbrev, and its expansion. The command +@code{define-mode-abbrev} does likewise for a mode-specific abbrev. + + To change the definition of an abbrev, just define a new definition. +When the abbrev has a prior definition, the abbrev definition commands +ask for confirmation before replacing it. + +@findex kill-all-abbrevs + To remove an abbrev definition, give a negative argument to the +abbrev definition command: @kbd{C-u - C-x a g} or @kbd{C-u - C-x a l}. +The former removes a global definition, while the latter removes a +mode-specific definition. @kbd{M-x kill-all-abbrevs} removes all +abbrev definitions, both global and local. + +@node Expanding Abbrevs +@section Controlling Abbrev Expansion + + When Abbrev mode is enabled, an abbrev expands whenever it is +present in the buffer just before point and you type a self-inserting +whitespace or punctuation character (@key{SPC}, comma, etc.@:). More +precisely, any character that is not a word constituent expands an +abbrev, and any word-constituent character can be part of an abbrev. +The most common way to use an abbrev is to insert it and then insert a +punctuation or whitespace character to expand it. + +@vindex abbrev-all-caps + Abbrev expansion preserves case; thus, @samp{foo} expands into @samp{find +outer otter}; @samp{Foo} into @samp{Find outer otter}, and @samp{FOO} into +@samp{FIND OUTER OTTER} or @samp{Find Outer Otter} according to the +variable @code{abbrev-all-caps} (setting it non-@code{nil} specifies +@samp{FIND OUTER OTTER}). + + These commands are used to control abbrev expansion: + +@table @kbd +@item M-' +Separate a prefix from a following abbrev to be expanded +(@code{abbrev-prefix-mark}). +@item C-x a e +@findex expand-abbrev +Expand the abbrev before point (@code{expand-abbrev}). +This is effective even when Abbrev mode is not enabled. +@item M-x expand-region-abbrevs +Expand some or all abbrevs found in the region. +@end table + +@kindex M-' +@findex abbrev-prefix-mark + You may wish to expand an abbrev and attach a prefix to the expansion; +for example, if @samp{cnst} expands into @samp{construction}, you might want +to use it to enter @samp{reconstruction}. It does not work to type +@kbd{recnst}, because that is not necessarily a defined abbrev. What +you can do is use the command @kbd{M-'} (@code{abbrev-prefix-mark}) in +between the prefix @samp{re} and the abbrev @samp{cnst}. First, insert +@samp{re}. Then type @kbd{M-'}; this inserts a hyphen in the buffer to +indicate that it has done its work. Then insert the abbrev @samp{cnst}; +the buffer now contains @samp{re-cnst}. Now insert a non-word character +to expand the abbrev @samp{cnst} into @samp{construction}. This +expansion step also deletes the hyphen that indicated @kbd{M-'} had been +used. The result is the desired @samp{reconstruction}. + + If you actually want the text of the abbrev in the buffer, rather than +its expansion, you can accomplish this by inserting the following +punctuation with @kbd{C-q}. Thus, @kbd{foo C-q ,} leaves @samp{foo,} in +the buffer, not expanding it. + +@findex unexpand-abbrev + If you expand an abbrev by mistake, you can undo the expansion and +bring back the abbrev itself by typing @kbd{C-_} to undo (@pxref{Undo}). +This also undoes the insertion of the non-word character that expanded +the abbrev. If the result you want is the terminating non-word +character plus the unexpanded abbrev, you must reinsert the terminating +character, quoting it with @kbd{C-q}. You can also use the command +@kbd{M-x unexpand-abbrev} to cancel the last expansion without +deleting the terminating character. + +@findex expand-region-abbrevs + @kbd{M-x expand-region-abbrevs} searches through the region for defined +abbrevs, and for each one found offers to replace it with its expansion. +This command is useful if you have typed in text using abbrevs but forgot +to turn on Abbrev mode first. It may also be useful together with a +special set of abbrev definitions for making several global replacements at +once. This command is effective even if Abbrev mode is not enabled. + + Expanding any abbrev first runs the hook @code{pre-abbrev-expand-hook} +(@pxref{Hooks}). + +@need 1500 +@node Editing Abbrevs +@section Examining and Editing Abbrevs + +@table @kbd +@item M-x list-abbrevs +Display a list of all abbrev definitions. With a numeric argument, list +only local abbrevs. +@item M-x edit-abbrevs +Edit a list of abbrevs; you can add, alter or remove definitions. +@end table + +@findex list-abbrevs + The output from @kbd{M-x list-abbrevs} looks like this: + +@example +@var{various other tables@dots{}} +(lisp-mode-abbrev-table) +"dk" 0 "define-key" +(global-abbrev-table) +"dfn" 0 "definition" +@end example + +@noindent +(Some blank lines of no semantic significance, and some other abbrev +tables, have been omitted.) + + A line containing a name in parentheses is the header for abbrevs in a +particular abbrev table; @code{global-abbrev-table} contains all the global +abbrevs, and the other abbrev tables that are named after major modes +contain the mode-specific abbrevs. + + Within each abbrev table, each nonblank line defines one abbrev. The +word at the beginning of the line is the abbrev. The number that +follows is the number of times the abbrev has been expanded. Emacs +keeps track of this to help you see which abbrevs you actually use, so +that you can eliminate those that you don't use often. The string at +the end of the line is the expansion. + + Some abbrevs are marked with @samp{(sys)}. These ``system'' abbrevs +(@pxref{Abbrevs,,, elisp, The Emacs Lisp Reference Manual}) are +pre-defined by various modes, and are not saved to your abbrev file. +To disable a ``system'' abbrev, define an abbrev of the same name that +expands to itself, and save it to your abbrev file. + +@findex edit-abbrevs +@kindex C-c C-c @r{(Edit Abbrevs)} + @kbd{M-x edit-abbrevs} allows you to add, change or kill abbrev +definitions by editing a list of them in an Emacs buffer. The list has +the same format described above. The buffer of abbrevs is called +@samp{*Abbrevs*}, and is in Edit-Abbrevs mode. Type @kbd{C-c C-c} in +this buffer to install the abbrev definitions as specified in the +buffer---and delete any abbrev definitions not listed. + + The command @code{edit-abbrevs} is actually the same as +@code{list-abbrevs} except that it selects the buffer @samp{*Abbrevs*} +whereas @code{list-abbrevs} merely displays it in another window. + +@node Saving Abbrevs +@section Saving Abbrevs + + These commands allow you to keep abbrev definitions between editing +sessions. + +@table @kbd +@item M-x write-abbrev-file @key{RET} @var{file} @key{RET} +Write a file @var{file} describing all defined abbrevs. +@item M-x read-abbrev-file @key{RET} @var{file} @key{RET} +Read the file @var{file} and define abbrevs as specified therein. +@item M-x quietly-read-abbrev-file @key{RET} @var{file} @key{RET} +Similar but do not display a message about what is going on. +@item M-x define-abbrevs +Define abbrevs from definitions in current buffer. +@item M-x insert-abbrevs +Insert all abbrevs and their expansions into current buffer. +@end table + +@findex write-abbrev-file + @kbd{M-x write-abbrev-file} reads a file name using the minibuffer and +then writes a description of all current abbrev definitions into that +file. This is used to save abbrev definitions for use in a later +session. The text stored in the file is a series of Lisp expressions +that, when executed, define the same abbrevs that you currently have. + +@findex read-abbrev-file +@findex quietly-read-abbrev-file +@vindex abbrev-file-name + @kbd{M-x read-abbrev-file} reads a file name using the minibuffer +and then reads the file, defining abbrevs according to the contents of +the file. The function @code{quietly-read-abbrev-file} is similar +except that it does not display a message in the echo area; you cannot +invoke it interactively, and it is used primarily in the @file{.emacs} +file. If either of these functions is called with @code{nil} as the +argument, it uses the file name specified in the variable +@code{abbrev-file-name}, which is by default @code{"~/.abbrev_defs"}. +That file is your standard abbrev definition file, and Emacs loads +abbrevs from it automatically when it starts up. + +@vindex save-abbrevs + Emacs will offer to save abbrevs automatically if you have changed +any of them, whenever it offers to save all files (for @kbd{C-x s} or +@kbd{C-x C-c}). It saves them in the file specified by +@code{abbrev-file-name}. This feature can be inhibited by setting the +variable @code{save-abbrevs} to @code{nil}. + +@findex insert-abbrevs +@findex define-abbrevs + The commands @kbd{M-x insert-abbrevs} and @kbd{M-x define-abbrevs} are +similar to the previous commands but work on text in an Emacs buffer. +@kbd{M-x insert-abbrevs} inserts text into the current buffer after point, +describing all current abbrev definitions; @kbd{M-x define-abbrevs} parses +the entire current buffer and defines abbrevs accordingly. + +@node Dynamic Abbrevs +@section Dynamic Abbrev Expansion + + The abbrev facility described above operates automatically as you +insert text, but all abbrevs must be defined explicitly. By contrast, +@dfn{dynamic abbrevs} allow the meanings of abbreviations to be +determined automatically from the contents of the buffer, but dynamic +abbrev expansion happens only when you request it explicitly. + +@kindex M-/ +@kindex C-M-/ +@findex dabbrev-expand +@findex dabbrev-completion +@table @kbd +@item M-/ +Expand the word in the buffer before point as a @dfn{dynamic abbrev}, +by searching in the buffer for words starting with that abbreviation +(@code{dabbrev-expand}). + +@item C-M-/ +Complete the word before point as a dynamic abbrev +(@code{dabbrev-completion}). +@end table + +@vindex dabbrev-limit + For example, if the buffer contains @samp{does this follow } and you +type @kbd{f o M-/}, the effect is to insert @samp{follow} because that +is the last word in the buffer that starts with @samp{fo}. A numeric +argument to @kbd{M-/} says to take the second, third, etc.@: distinct +expansion found looking backward from point. Repeating @kbd{M-/} +searches for an alternative expansion by looking farther back. After +scanning all the text before point, it searches the text after point. +The variable @code{dabbrev-limit}, if non-@code{nil}, specifies how far +away in the buffer to search for an expansion. + +@vindex dabbrev-check-all-buffers + After scanning the current buffer, @kbd{M-/} normally searches other +buffers, unless you have set @code{dabbrev-check-all-buffers} to +@code{nil}. + +@vindex dabbrev-ignored-buffer-regexps + For finer control over which buffers to scan, customize the variable +@code{dabbrev-ignored-buffer-regexps}. Its value is a list of regular +expressions. If a buffer's name matches any of these regular +expressions, dynamic abbrev expansion skips that buffer. + + A negative argument to @kbd{M-/}, as in @kbd{C-u - M-/}, says to +search first for expansions after point, then other buffers, and +consider expansions before point only as a last resort. If you repeat +the @kbd{M-/} to look for another expansion, do not specify an +argument. Repeating @kbd{M-/} cycles through all the expansions after +point and then the expansions before point. + + After you have expanded a dynamic abbrev, you can copy additional +words that follow the expansion in its original context. Simply type +@kbd{@key{SPC} M-/} for each additional word you want to copy. The +spacing and punctuation between words is copied along with the words. + + The command @kbd{C-M-/} (@code{dabbrev-completion}) performs +completion of a dynamic abbrev. Instead of trying the possible +expansions one by one, it finds all of them, then inserts the text +that they have in common. If they have nothing in common, @kbd{C-M-/} +displays a list of completions, from which you can select a choice in +the usual manner. @xref{Completion}. + + Dynamic abbrev expansion is completely independent of Abbrev mode; the +expansion of a word with @kbd{M-/} is completely independent of whether +it has a definition as an ordinary abbrev. + +@node Dabbrev Customization +@section Customizing Dynamic Abbreviation + + Normally, dynamic abbrev expansion ignores case when searching for +expansions. That is, the expansion need not agree in case with the word +you are expanding. + +@vindex dabbrev-case-fold-search + This feature is controlled by the variable +@code{dabbrev-case-fold-search}. If it is @code{t}, case is ignored in +this search; if it is @code{nil}, the word and the expansion must match +in case. If the value of @code{dabbrev-case-fold-search} is +@code{case-fold-search}, which is true by default, then the variable +@code{case-fold-search} controls whether to ignore case while searching +for expansions. + +@vindex dabbrev-case-replace + Normally, dynamic abbrev expansion preserves the case pattern +@emph{of the dynamic abbrev you are expanding}, by converting the +expansion to that case pattern. + +@vindex dabbrev-case-fold-search + The variable @code{dabbrev-case-replace} controls whether to +preserve the case pattern of the dynamic abbrev. If it is @code{t}, +the dynamic abbrev's case pattern is preserved in most cases; if it is +@code{nil}, the expansion is always copied verbatim. If the value of +@code{dabbrev-case-replace} is @code{case-replace}, which is true by +default, then the variable @code{case-replace} controls whether to +copy the expansion verbatim. + + However, if the expansion contains a complex mixed case pattern, and +the dynamic abbrev matches this pattern as far as it goes, then the +expansion is always copied verbatim, regardless of those variables. +Thus, for example, if the buffer contains +@code{variableWithSillyCasePattern}, and you type @kbd{v a M-/}, it +copies the expansion verbatim including its case pattern. + +@vindex dabbrev-abbrev-char-regexp + The variable @code{dabbrev-abbrev-char-regexp}, if non-@code{nil}, +controls which characters are considered part of a word, for dynamic expansion +purposes. The regular expression must match just one character, never +two or more. The same regular expression also determines which +characters are part of an expansion. The value @code{nil} has a special +meaning: dynamic abbrevs are made of word characters, but expansions are +made of word and symbol characters. + +@vindex dabbrev-abbrev-skip-leading-regexp + In shell scripts and makefiles, a variable name is sometimes prefixed +with @samp{$} and sometimes not. Major modes for this kind of text can +customize dynamic abbrev expansion to handle optional prefixes by setting +the variable @code{dabbrev-abbrev-skip-leading-regexp}. Its value +should be a regular expression that matches the optional prefix that +dynamic abbrev expression should ignore. + +@ignore + arch-tag: 638e0079-9540-48ec-9166-414083e16445 +@end ignore diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi new file mode 100644 index 00000000000..d5dbf1ae8ca --- /dev/null +++ b/doc/emacs/ack.texi @@ -0,0 +1,1574 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003, +@c 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@c +@node Acknowledgments, Screen, Concept Index, Top +@unnumbered Acknowledgments + +Many people have contributed code included in the Free Software +Foundation's distribution of GNU Emacs. To show our appreciation for +their public spirit, we list here in alphabetical order those who have +written substantial portions. + +@c We should list here anyone who has contributed a new package, +@c and anyone who has made major enhancements in Emacs +@c that many users would notice and consider important. + +@itemize @bullet +@item +Per Abrahamsen wrote the customization buffer facilities, as well as +@file{double.el} for typing accented characters not normally available +from the keyboard, @file{xt-mouse.el} which handles mouse commands +through Xterm, @file{gnus-cus.el} which implements customization +commands for Gnus, @file{gnus-cite.el}, a citation-parsing facility +for news articles and @file{cpp.el} which hides or highlights parts of +C programs according to preprocessor conditionals. + +@item +Tomas Abrahamsson wrote @file{artist.el}, a package for producing @acronym{ASCII} +art with a mouse or with keyboard keys. + +@item +Jay K.@: Adams wrote @file{jka-compr.el}, providing automatic +decompression and recompression for compressed files. + +@item +Ralf Angeli wrote @file{scroll-lock.el}, a minor mode which keeps the +point vertically fixed by scrolling the window when moving up and down +in the buffer. + +@item +Joe Arceneaux wrote the original text property implementation, and +implemented support for X11. + +@item +Miles Bader wrote @file{image-file.el}, support code for visiting +image files, @file{minibuf-eldef.el}, a minor mode whereby the default +value is shown in the minibuffer prompt only when appropriate, and +@file{button.el}, the library that implements clickable buttons. + +@item +David Bakhash wrote @file{strokes.el}, a mode for controlling Emacs by +moving the mouse in particular patterns. + +@item +Eli Barzilay wrote @file{calculator.el}, a desktop calculator for +Emacs. + +@item +Steven L.@: Baur wrote +@c If earcon.el actually works with Emacs 21, it isn't useful for lack +@c of sound files. -- fx +@c @file{earcon.el}, a facility for sound effects +@c for email and news messages, +@file{footnote.el} which lets you include +footnotes in email messages, and @file{gnus-audio.el} which provides +sound effects for Gnus. + +@item +Alexander L. Belikoff, Sergey Berezin, David Edmondson, Andreas +Fuchs, Mario Lang, Gergely Nagy, Michael Olson, and Alex Schroeder +contributed ERC, an advanced Internet Relay Chat client. + +@item +Boaz Ben-Zvi wrote @file{profile.el}, to time Emacs Lisp functions. + +@item +Anna M. Bigatti wrote @file{cal-html.el}, which produces HTML calendars. + +@item +Ray Blaak wrote @file{delphi.el}, a major mode for editing Delphi +(Object Pascal) source code. + +@item +Jim Blandy wrote Emacs 19's input system, brought its configuration and +build process up to the GNU coding standards, and contributed to the +frame support and multi-face support. Jim also wrote @file{tvi970.el}, +terminal support for the TeleVideo 970 terminals. + +@item +Per Bothner wrote @file{term.el}, a terminal emulator in an Emacs +buffer. + +@item +Terrence M.@: Brannon wrote @file{landmark.el}, a neural-network robot +that learns landmarks. + +@item +Frank Bresz wrote @file{diff.el}, a program to display @code{diff} +output. + +@item +Peter Breton implemented: + +@itemize @minus +@item +@file{dirtrack} which does better tracking of directory changes in shell +buffers, +@item +@file{filecache.el} which records which directories your files are in, +@item +@file{locate.el} which interfaces to the @code{locate} command, +@item +@file{find-lisp.el}, an Emacs Lisp emulation of the @code{find} program, +@item +@file{net-utils.el}, and +@item +the ``generic mode'' feature. +@end itemize + +@item +Emmanuel Briot wrote @file{xml.el}, an XML parser for Emacs. + +@item +Kevin Broadey wrote @file{foldout.el}, providing folding extensions to +Emacs's outline modes. + +@c @item +@c Vincent Broman wrote @file{ada.el}, a mode for editing Ada code +@c (since replaced by @file{ada-mode.el}). + +@item +David M.@: Brown wrote @file{array.el}, for editing arrays and other +tabular data. + +@item +W@l{}odek Bzyl and Ryszard Kubiak wrote @file{ogonek.el}, a package for +changing the encoding of Polish characters. + +@item +Bill Carpenter provided @file{feedmail.el}, a package for massaging +outgoing mail messages and sending them through various popular mailers. + +@item +Per Cederqvist and Inge Wallin wrote @file{ewoc.el}, an Emacs widget for +manipulating object collections. + +@item +Hans Chalupsky wrote @file{advice.el}, an overloading mechanism for +Emacs Lisp functions, and @file{trace.el}, a tracing facility for Emacs +Lisp. + +@item +Chris Chase and Carsten Dominik wrote @file{idlwave.el}, an editing mode +for IDL and WAVE CL. + +@item +Bob Chassell wrote @file{texnfo-upd.el} and @file{makeinfo.el}, modes +and utilities for working with Texinfo files; and @file{page-ext.el}, +commands for extended page handling. + +@item +Andrew Choi wrote the Macintosh support code, and contributed +@file{mac-win.el}, support for the Mac window system. + +@item +James Clark wrote @file{sgml-mode.el}, a mode for editing SGML +documents, and contributed to Emacs's dumping procedures. + +@item +Mike Clarkson wrote @file{edt.el}, an emulation of DEC's EDT editor. + +@item +Glynn Clements provided @file{gamegrid.el} and a couple of games that +use it, Snake and Tetris. + +@item +Georges Brun-Cottan and Stefan Monnier wrote @file{easy-mmode.el}, a +package for easy definition of major and minor modes. + +@item +Andrew Csillag wrote M4 mode (@file{m4-mode.el}). + +@item +Doug Cutting and Jamie Zawinski wrote @file{disass.el}, a disassembler +for compiled Emacs Lisp code. + +@item +Mathias Dahl wrote @file{image-dired.el}, a package for viewing image +files as ``thumbnails.'' + +@item +Michael DeCorte wrote @file{emacs.csh}, a C-shell script that starts a +new Emacs job, or restarts a paused Emacs if one exists. + +@item +Gary Delp wrote @file{mailpost.el}, an interface between RMAIL and the +@file{/usr/uci/post} mailer. + +@item +Matthieu Devin wrote @file{delsel.el}, a package to make newly-typed +text replace the current selection. + +@item +Eric Ding contributed @file{goto-addr.el}, + +@item +Jan Dj@"{a}rv added support for the GTK+ toolkit and X drag-and-drop. + +@item +Carsten Dominik wrote @file{reftex.el}, a package for setting up +labels and cross-references in La@TeX{} documents, and @file{org.el}, +a mode for maintaining notes, todo lists, and project planning. + +@item +Scott Draves wrote @file{tq.el}, help functions for maintaining +transaction queues between Emacs and its subprocesses. + +@item +Benjamin Drieu wrote @file{pong.el}, an implementation of the classical +pong game. + +@item +Viktor Dukhovni wrote support for dumping under SunOS version 4. + +@item +John Eaton co-wrote Octave mode. + +@item +Rolf Ebert co-wrote Ada mode (@file{ada-mode.el}). + +@item +Stephen Eglen implemented @file{mspools.el}, for use with Procmail, +which tells you which mail folders have mail waiting in them, and +@file{iswitchb.el}, a feature for incremental reading and completion of +buffer names. + +@item +Torbj@"orn +Einarsson contributed the Fortran 90 mode (@file{f90.el}). + +@item +Tsugutomo Enami co-wrote the support for international character sets. + +@item +Hans Henrik Eriksen wrote @file{simula.el}, a mode for editing SIMULA 87 +code. + +@item +Michael Ernst wrote @file{reposition.el}, a command for recentering a +function's source code and preceding comment on the screen. + +@item +Ata Etemadi wrote @file{cdl.el}, functions for working with Common Data +Language source code. + +@item +Frederick Farnbach implemented @file{morse.el}, which converts text to +Morse code. + +@item +Oscar Figueiredo wrote EUDC, the Emacs Unified Directory Client, which +is an interface to directory servers via LDAP, CCSO PH/QI, or BBDB; and +@file{ldap.el}, the LDAP client interface. + +@item +Fred Fish wrote the support for dumping COFF executable files. + +@item +Karl Fogel wrote: + +@itemize @minus +@item +@file{bookmark.el}, for creating named placeholders, saving them and +jumping to them later, +@item +@file{mail-hist.el}, a history mechanism for outgoing mail messages, and +@item +@file{saveplace.el}, for preserving point's location in files between +editing sessions. +@end itemize + +@item +Gary Foster wrote @file{crisp.el}, the emulation for CRiSP and Brief +editors, and @file{scroll-lock.el} (now @file{scroll-all.el}) a mode +for scrolling several buffers together. + +@item +Noah Friedman wrote @file{rlogin.el}, an interface to Rlogin, +@file{type-break.el}, which reminds you to take periodic breaks from +typing, and @code{eldoc-mode}, a mode to show the defined parameters or +the doc string for the Lisp function near point. With Roland McGrath, +he wrote @file{rsz-mini.el}, a minor mode to automatically resize the +minibuffer to fit the text it contains. + +@item +Keith Gabryelski wrote @file{hexl.el}, a mode for editing binary files. + +@item +Kevin Gallagher rewrote and enhanced the EDT emulation, and wrote +@file{flow-ctrl.el}, a package for coping with unsuppressible XON/XOFF +flow control. + +@item +Kevin Gallo added multiple-frame support for Windows NT and wrote +@file{w32-win.el}, support functions for the MS-Windows window system. + +@item +Juan Le@'{o}n Lahoz Garc@'{i}a wrote @file{wdired.el}, a package for +performing file operations by directly editing Dired buffers. + +@item +Howard Gayle wrote: + +@itemize @minus +@item +the C and lisp code for display tables and case tables, +@item +@file{rot13.el}, a command to display the plain-text form of a buffer +encoded with the Caesar cipher, +@item +@file{case-table.el}, code to extend the character set and support case +tables, +@item +much of the support for the ISO-8859 European character sets (which +includes @file{iso-ascii.el}, @file{iso-insert.el}, @file{iso-swed.el}, +@file{latin-1.el}, @file{iso-syntax.el}, @file{iso-transl.el}, +@file{swedish.el}), and +@item +@file{vt100-led.el}, a package for controlling the LED's on +VT100-compatible terminals. +@end itemize + +@item +Stephen Gildea made the Emacs quick reference card, and made many +contributions for @file{time-stamp.el}, a package for maintaining +last-change time stamps in files. + +@item +Julien Gilles wrote @file{gnus-ml.el}, a mailing list minor mode for +Gnus. + +@item +David Gillespie wrote: + +@itemize @minus +@item +The Common Lisp compatibility packages, +@item +@code{Calc}, an advanced calculator and mathematical tool, +@item +@file{complete.el}, a partial completion mechanism, and +@item +@file{edmacro.el}, a package for editing keyboard macros. +@end itemize + +@item +Bob Glickstein contributed the @file{sregex.el} feature, a facility for +writing regexps using a Lisp-like syntax. + +@item +Boris Goldowsky wrote: + +@itemize @minus +@item +@file{avoid.el}, a package to keep the mouse cursor out of the way of +the text cursor, +@item +@file{shadowfile.el}, a package for keeping identical copies of files in +more than one place, +@item +@file{format.el}, a package for reading and writing files in various +formats, +@item +@file{enriched.el}, a package for saving text properties in files, and +@item +@file{facemenu.el}, a package for specifying faces. +@end itemize + +@item +Michelangelo Grigni wrote @file{ffap.el} which visits a file, +taking the file name from the buffer. + +@item +Odd Gripenstam wrote @file{dcl-mode.el} for editing DCL command files. + +@item +Kai Gro@ss{}johann and Michael Albinus wrote the Tramp package, which +provides transparent remote file editing using rcp, ssh, ftp, and other +network protocols. + +@item +Michael Gschwind wrote @file{iso-cvt.el}, a package to convert between +the ISO 8859-1 character set and the notations for non-@acronym{ASCII} +characters used by @TeX{} and net tradition, and @file{latin-2.el}, code +which sets up case-conversion and syntax tables for the ISO Latin-2 +character set. + +@item +Henry Guillaume wrote @file{find-file.el}, a package to visit files +related to the currently visited file. + +@item +Doug Gwyn wrote the portable @code{alloca} implementation. + +@item +Ken'ichi Handa implemented most of the support for international +character sets, and wrote @file{isearch-x.el}, a facility for searching +non-@acronym{ASCII} text. Together with Naoto Takahashi, he wrote +@file{quail.el}, a simple input facility for typing non-@acronym{ASCII} text from +an @acronym{ASCII} keyboard. Ken'ichi also wrote @file{ps-bdf.el}, a BDF font +support for printing non-@acronym{ASCII} text on a PostScript printer. + +@item +Chris Hanson wrote @file{netuname.el}, a package to use HP-UX's Remote +File Access facility from Emacs. + +@item +Jesper Harder wrote @file{yenc.el}, for decoding yenc encoded messages. + +@item +K. Shane Hartman wrote: + +@itemize @minus +@item +@file{chistory.el} and @file{echistory.el}, packages for browsing +command history lists, +@item +@file{electric.el} and @file{helper.el}, providing an alternative +command loop and appropriate help facilities, +@item +@file{emacsbug.el}, a package for reporting Emacs bugs, +@item +@file{picture.el}, a mode for editing @acronym{ASCII} pictures, and +@item +@file{view.el}, a package for perusing files and buffers without editing +them. +@end itemize + +@item +John Heidemann wrote @file{mouse-copy.el} and @file{mouse-drag.el}, +which provide alternative mouse-based editing and scrolling features. + +@item +Jon K Hellan wrote @file{utf7.el}, support for mail-safe transformation +format of Unicode. + +@item +Markus Heritsch co-wrote Ada mode (@file{ada-mode.el}). + +@item +Karl Heuer wrote the original blessmail script, implemented the +@code{intangible} text property, and rearranged the structure of the +@code{Lisp_Object} type to allow for more data bits. + +@item +Manabu Higashida ported Emacs to MS-DOS. + +@item +Anders Holst wrote @file{hippie-exp.el}, a versatile completion and +expansion package. + +@item +Kurt Hornik co-wrote Octave mode. + +@item +Tom Houlder wrote @file{mantemp.el}, which generates manual C@t{++} +template instantiations. + +@item +Joakim Hove wrote @file{html2text.el}, a html to plain text converter. +@item +Denis Howe wrote @file{browse-url.el}, a package for invoking a WWW +browser to display a URL. + +@item +Lars Magne Ingebrigtsen did a major redesign of the Gnus news-reader and +wrote many of its parts. + +@item +Andrew Innes contributed extensively to the MS-Windows support. + +@item +Seiichiro Inoue improved Emacs's XIM support. + +@item +Ulf Jasper wrote @file{icalendar.el}, a package for converting Emacs +diary entries to and from the iCalendar format, and +@file{newsticker.el}, an RSS and Atom based Newsticker. + +@item +Kyle Jones wrote @file{life.el}, a package to play Conway's ``life'' game, +and @file{mldrag.el}, a package which allows the user to resize windows +by dragging mode lines and vertical window separators with the mouse. + +@item +Terry Jones wrote @file{shadow.el}, a package for finding potential +load-path problems when some Lisp file ``shadows'' another. + +@item +Simon Josefsson wrote: + +@itemize @minus +@item +@file{dns-mode.el}, an editing mode for Domain Name System master files, +@item +@file{flow-fill.el}, a package for interpreting RFC2646 formatted text +in messages, +@item +@file{fringe.el}, a package for customizing the fringe, +@item +@file{imap.el}, an Emacs Lisp library for talking to IMAP servers, +@item +@file{nnimap}, the IMAP back-end for Gnus, and +@item +@file{rfc2104.el}, a hashed message authentication facility. +@end itemize + +@item +Arne J@o{}rgensen wrote @file{latexenc.el}, a package to +automatically guess the correct coding system in LaTeX files. + +@item +Tomoji Kagatani implemented @file{smtpmail.el}, used for sending out +mail with SMTP. + +@item +David Kaufman wrote @file{yow.c}, an essential utility program for the +hopelessly pinheaded. + +@item +Henry Kautz wrote @file{bib-mode.el}, a mode for maintaining +bibliography databases compatible with @code{refer} (the @code{troff} +version) and @code{lookbib}, and @file{refbib.el}, a package to convert +those databases to the format used by the LaTeX text formatting package. + +@item +Taichi Kawabata added support for Devanagari script and the Indian +languages. + +@item +Howard Kaye wrote @file{sort.el}, commands to sort text in Emacs +buffers. + +@item +Michael Kifer wrote @file{ediff.el}, an interactive interface to the +@command{diff}, @command{patch}, and @command{merge} programs, and +Viper, the newest emulation for VI. + +@item +Richard King wrote the first version of @file{userlock.el} and +@file{filelock.c}, which provide simple support for multiple users +editing the same file. He also wrote the initial version of +@file{uniquify.el}, a facility to make buffer names unique by adding +parts of the file's name to the buffer name. +@c We're not using his backquote.el any more. + +@item +Peter Kleiweg wrote @file{ps-mode.el}, a major mode for editing +PostScript files and running a PostScript interpreter interactively from +within Emacs. + +@item +Pavel Kobiakov wrote @file{flymake.el}, a minor mode for performing +on-the-fly syntax checking. + +@item +Larry K.@: Kolodney wrote @file{cvtmail.c}, a program to convert the mail +directories used by Gosling Emacs into RMAIL format. + +@item +David M.@: Koppelman wrote @file{hi-lock.el}, a minor mode for +interactive automatic highlighting of parts of the buffer text. + +@item +Koseki Yoshinori wrote @file{iimage.el}, a minor mode for displaying +inline images. + +@item +Robert Krawitz wrote the original @file{xmenu.c}, part of Emacs's pop-up +menu support. + +@item +Sebastian Kremer wrote Emacs 19's @code{dired-mode}, with contributions +by Lawrence R.@: Dodd. He also wrote @file{ls-lisp.el}, a Lisp emulation +of the @code{ls} command for platforms which don't have @code{ls} as a +standard program. + +@item +Geoff Kuenning wrote Emacs 19's @file{ispell.el}, based on work by Ken +Stevens and others. + +@item +David K@ringaccent{a}gedal wrote @file{tempo.el}, providing support for +easy insertion of boilerplate text and other common constructions. + +@item +Daniel LaLiberte wrote: + +@itemize @minus +@item +@file{edebug.el}, a source-level debugger for Emacs Lisp, +@item +@file{cl-specs.el}, specifications to help @code{edebug} debug code +written using David Gillespie's Common Lisp support, +@item +@file{cust-print.el}, a customizable package for printing lisp objects, +@item +@file{eval-reg.el}, a re-implementation of @code{eval-region} in Emacs +Lisp, and +@item +@file{isearch.el}, Emacs's incremental search minor mode. +@end itemize + +@item +James R.@: Larus wrote @file{mh-e.el}, an interface to the MH mail system. + +@item +Vinicius Jose Latorre wrote the Emacs printing facilities, as well as: + +@itemize @minus +@item +@code{ps-print}, a package for pretty-printing Emacs buffers to +PostScript printers, +@item +@file{delim-col.el}, a package to arrange text into columns, +@item +@file{ebnf2ps.el}, a package that translates EBNF grammar to a syntactic +chart that can be printed to a PostScript printer. +@end itemize + +@item +Frederic Lepied contributed @file{expand.el}, which uses the abbrev +mechanism for inserting programming constructs. + +@item +Peter Liljenberg wrote @file{elint.el}, a Lint-style code checker for +Emacs Lisp programs. + +@item +Lars Lindberg wrote @file{msb.el}, which provides more flexible menus +for buffer selection, and rewrote @file{dabbrev.el}. + +@item +Anders Lindgren wrote @file{autorevert.el}, a package for automatically +reverting files visited by Emacs that were changed on disk; +@file{cwarn.el}, a package to highlight suspicious C and C@t{++} +constructs; and @file{follow.el}, a minor mode to synchronize windows +that show the same buffer. + +@item +Thomas Link wrote @file{filesets.el}, a package for handling sets of +files. + +@item +Dave Love wrote much of the code dealing with Unicode support and +Latin-N unification. He added support for many coding systems, +including those in @file{code-pages.el} and the various UTF-7 and +UTF-16 coding systems. He also wrote: + +@itemize @minus +@item +@code{autoarg-mode}, a global minor mode whereby digit keys supply +prefix arguments, and @code{autoarg-kp-mode} which redefines the keypad +numeric keys to digit arguments, +@item +@file{autoconf.el}, a mode for editing Autoconf @file{configure.in} +files, +@item +@file{cfengine.el}, a mode for editing Cfengine files, +@item +@file{elide-head.el}, a package for eliding boilerplate text, such as +copyright notices, from file headers, +@item +@file{hl-line.el}, a package that provides a minor mode for highlighting +the line in the current window on which point is, +@item +@file{latin-8.el} and @file{latin-9.el}, code which sets up +case-conversion and syntax tables for the ISO Latin-8 and Latin-9 +character sets, +@item +@file{latin1-disp.el}, a package that lets you display ISO 8859 +characters on Latin-1 terminals by setting up appropriate display +tables, +@item +@file{python.el}, a major mode for the Python programming language. +@item +@file{refill.el}, a mode for automatic paragraph refilling, akin to +typical word processors, +@item +@file{smiley-ems.el}, a facility for displaying smiley faces, and +@item +@file{tool-bar.el}, a mode to control the display of the Emacs tool bar. +@end itemize + +@item +Eric Ludlam wrote the Speedbar package and the following packages: + +@itemize @minus +@item +@file{checkdoc.el}, for checking doc strings in Emacs Lisp programs, +@item +@file{dframe.el}, providing dedicatd frame support modes, and +@item +@file{ezimage.el}, a generalized way to place images over text. +@end itemize + +@item +Alan Mackenzie wrote the integrated AWK support in CC Mode. + +@item +Christopher J.@: Madsen wrote @file{decipher.el}, a package for cracking +simple substitution ciphers. + +@item +Neil M.@: Mager wrote @file{appt.el}, functions to notify users of their +appointments. It finds appointments recorded in the diary files +generated by Edward M.@: Reingold's @code{calendar} package. + +@item +Ken Manheimer wrote @file{allout.el}, a mode for manipulating and +formatting outlines, and @file{icomplete.el}, which provides incremental +completion feedback in the minibuffer. + +@item +Bill Mann wrote @file{perl-mode.el}, a mode for editing Perl code. + +@item +Brian Marick and Daniel LaLiberte wrote @file{hideif.el}, support for +hiding selected code within C @code{#ifdef} clauses. + +@item +Simon Marshall wrote @file{regexp-opt.el}, which generates a regular +expression from a list of strings. He also extended @file{comint.el}, +originally written by Olin Shivers. + +@item +Bengt Martensson, Marc Shapiro, Mike Newton, Aaron Larson, and Stefan +Schoef, wrote @file{bibtex.el}, a mode for editing Bib@TeX{} +bibliography files. + +@item +Charlie Martin wrote @file{autoinsert.el}, which provides automatic +mode-sensitive insertion of text into new files. + +@item +Thomas May wrote @file{blackbox.el}, a version of the traditional +blackbox game. + +@item +Roland McGrath wrote: + +@itemize @minus +@item +@file{compile.el}, a package for running compilations in a buffer, and +then visiting the locations reported in error messages, +@item +@file{etags.el}, a package for jumping to function definitions and +searching or replacing in all the files mentioned in a @file{TAGS} file, +@item +@file{find-dired.el}, for using @code{dired} commands on output from the +@code{find} program, with Sebastian Kremer, +@item +@file{map-ynp.el}, a general purpose boolean question-asker, +@item +@file{autoload.el}, providing semi-automatic maintenance of autoload +files, and +@item +@file{upd-copyr.el}, providing semi-automatic maintenance of copyright +notices in source code. +@end itemize + +@item +David Megginson wrote @file{derived.el}, which allows one to define new +major modes by inheriting key bindings and commands from existing major +modes. + +@item +Will Mengarini wrote @file{repeat.el}, a command to repeat the preceding +command with its arguments. + +@item +Wayne Mesard wrote @file{hscroll.el} which does horizontal scrolling +automatically. + +@item +Brad Miller wrote @file{gnus-gl.el}, a Gnus interface for GroupLens. + +@item +Richard Mlynarik wrote: + +@itemize @minus +@item +@file{cl-indent.el}, a package for indenting Common Lisp code, +@item +@file{ebuff-menu.el}, an ``electric'' browser for buffer listings, +@item +@file{ehelp.el}, bindings for browsing help screens, +@item +@file{rfc822.el}, a parser for E-mail addresses in the RFC-822 format, +used in mail messages and news articles, +@item +@file{terminal.el}, a terminal emulator for Emacs subprocesses, and +@item +@file{yow.el}, an essential utility (try @kbd{M-x yow}). +@end itemize + +@item +Gerd Moellmann was the Emacs maintainer from the beginning of Emacs 21 +development until the release of 21.1. He wrote: + +@itemize @minus +@item +the new display engine for Emacs 21, +@item +the asynchronous timers facility (@file{atimer.c}), +@item +the @code{ebrowse} C@t{++} browser, +@item +@file{jit-lock.el}, the Just-In-Time font-lock support mode, +@item +@file{tooltip.el}, a package for displaying tooltips, and +@item +@file{authors.el} package for maintaining the @file{AUTHORS} files. +@end itemize + +@item +Stefan Monnier added support for Arch, Subversion, and Meta-CVS to VC, +and re-wrote much of the Emacs server to use the built-in networking +primitives. He also wrote: + +@itemize @minus +@item +@code{PCL-CVS}, a directory-level front end to the CVS version control +system, +@item +@file{reveal.el}, a minor mode for automatically revealing invisible +text, +@item +@file{smerge-mode.el}, a minor mode for resolving @code{diff3} +conflicts, and +@item +@file{diff-mode.el}, a mode for viewing and editing context diffs. +@end itemize + +@item +Morioka Tomohiko wrote several packages for MIME support in Gnus and +elsewhere. + +@item +Sen Nagata wrote @file{crm.el}, a package for reading multiple strings +with completion, and @file{rfc2368.el}, support for @code{mailto:} +URLs. + +@item +Erik Naggum wrote the time-conversion functions. He also wrote +@file{disp-table.el}, a package for dealing with display tables, +@file{latin-4.el} and @file{latin-5.el}, code which sets up +case-conversion and syntax tables for the ISO Latin-4 and Latin-5 +character sets, @file{mailheader.el}, a package for parsing email +headers, and @file{parse-time.el}, a package for parsing time strings. + +@item +Thomas Neumann and Eric Raymond wrote @file{makefile.el} (now +@file{make-mode.el}), a mode for editing makefiles. + +@item +Thien-Thi Nguyen and Dan Nicolaescu wrote @file{hideshow.el}, a minor +mode for selectively displaying blocks of text. + +@item +Dan Nicolaescu wrote @file{romanian.el}, support for editing Romanian +text, and @file{iris-ansi.el}, support for running Emacs on SGI's +@code{xwsh} and @code{winterm} terminal emulators. + +@item +Jurgen Nickelsen wrote @file{ws-mode.el}, providing WordStar emulation. + +@item +Hrvoje Niksic wrote @file{savehist.el}, for saving the minibuffer +history between Emacs sessions. + +@item +Jeff Norden wrote @file{kermit.el}, a package to help the Kermit +dialup communications program run comfortably in an Emacs shell buffer. + +@item +Andrew Norman wrote @file{ange-ftp.el}, providing transparent FTP +support. + +@item +Alexandre Oliva wrote @file{gnus-mlspl.el}, a group params-based mail +splitting mechanism. + +@item +Takaaki Ota wrote @file{table.el}, a package for creating and editing +embedded text-based tables. + +@item +Pieter E.@: J.@: Pareit wrote @file{mixal-mode.el}, an editing mode for +the MIX assembly language. + +@item +David Pearson contributed @file{quickurl.el}, a simple method of +inserting a URL into the current buffer based on text at point; +@file{5x5.el}, a game to fill all squares on the field. + +@item +Jeff Peck wrote: + +@itemize @minus +@item +@file{emacstool.c}, support for running Emacs under SunView/Sun Windows, +@item +@file{sun.el}, key bindings for sunterm keys, +@item +@file{sun-curs.el}, cursor definitions for Sun Windows, and +@item +@file{sun-fns.el} and @file{sun-mouse.el}, providing mouse support for +Sun Windows. +@end itemize + +@item +Damon Anton Permezel wrote @file{hanoi.el}, an animated demonstration of +the ``Towers of Hanoi'' puzzle. + +@item +William M.@: Perry wrote @file{mailcap.el}, a MIME media types +configuration facility, @file{mwheel.el}, a package for supporting +mouse wheels, and the URL package. + +@item +Per Persson wrote @file{gnus-vm.el}, the VM interface for Gnus. + +@item +Jens Petersen wrote @file{find-func.el}, which makes it easy to find +the source code for an Emacs Lisp function or variable. + +@item +Daniel Pfeiffer wrote: + +@itemize @minus +@item +@file{conf-mode.el}, a major mode for editing configuration files, +@item +@file{copyright.el}, a package for updating copyright notices in files, +@item +@file{executable.el}, a package for executing interpreter scripts, +@item +@file{sh-script.el}, a mode for editing shell scripts, +@item +@file{skeleton.el}, implementing a concise language for writing +statement skeletons, and +@item +@file{two-column.el}, a minor mode for simultaneous two-column editing. +@end itemize + +Daniel also rewrote @file{apropos.el}, originally written by Joe Wells, +and, together with Jim Blandy, co-authored @file{wyse50.el}, support for +Wyse 50 terminals. + +@item +Richard L.@: Pieri wrote @file{pop3.el}, a Post Office Protocol (RFC +1460) interface for Emacs. + +@item +Fred Pierresteguy and Paul Reilly made Emacs work with X Toolkit +widgets. + +@item +Christian Plaunt wrote @file{soundex.el}, an implementation of the +Soundex algorithm for comparing English words by their pronunciation. + +@item +David Ponce wrote: + +@itemize @minus +@item +@file{recentf.el}, a package that puts a menu of recently visited +files in the Emacs menu bar, +@item +@file{ruler-mode.el}, a minor mode for displaying a ruler in the +header line, and +@item +@file{tree-widget.el}, a package to display hierarchical data structures. +@end itemize + +@item +Francesco A.@: Potorti wrote @file{cmacexp.el}, providing a command which +runs the C preprocessor on a region of a file and displays the results. +He also expanded and redesigned the @code{etags} program. + +@item +Michael D.@: Prange and Steven A.@: Wood wrote @file{fortran.el}, a mode for +editing FORTRAN code. +@c We're not distributing his tex-mode.el anymore; we're using Ed Reingold's. + +@item +Mukesh Prasad contributed @file{vmsproc.el}, a facility for running +asynchronous subprocesses on VMS. + +@item +Marko Rahamaa wrote @file{latin-3.el}, code which sets up +case-conversion and syntax tables for the ISO Latin-3 character set. + +@item +Ashwin Ram wrote @file{refer.el}, commands to look up references in +bibliography files by keyword. + +@item +Eric S.@: Raymond wrote: + +@itemize @minus +@item +@file{vc.el}, an interface to the RCS and SCCS source code version +control systems, with Paul Eggert, +@item +@file{gud.el}, a package for running source-level debuggers like GDB +and SDB in Emacs, +@item +@file{asm-mode.el}, a mode for editing assembly language code, +@item +@file{AT386.el}, terminal support package for IBM's AT keyboards, +@item +@file{cookie1.el}, support for ``fortune-cookie'' programs like +@file{yow.el} and @file{spook.el}, +@item +@file{finder.el}, a package for finding Emacs Lisp packages by keyword +and topic, +@item +@file{keyswap.el}, code to swap the @key{BS} and @key{DEL} keys, +@item +@file{loadhist.el}, functions for loading and unloading Emacs features, +@item +@file{lisp-mnt.el}, functions for working with the special headers used +in Emacs Lisp library files, and +@item +code to set and make use of the @code{load-history} lisp variable, which +records the source file from which each lisp function loaded into Emacs +came. +@end itemize + +@item +Edward M.@: Reingold wrote the extensive calendar and diary support (try +@kbd{M-x calendar}), with contributions from Stewart Clamen, Nachum +Dershowitz, Paul Eggert, Steve Fisk, Michael Kifer, and Lara Rios. Andy +Oram contributed to its documentation. Reingold has also contributed to +@file{tex-mode.el}, a mode for editing @TeX{} files, as have William +F.@: Schelter, Dick King, Stephen Gildea, Michael Prange, and Jacob Gore. + +@item +David Reitter wrote @file{mailclient.el} which can send mail via the +system's designated mail client. + +@item +Alex Rezinsky contributed @file{which-func.el}, a mode that shows the +name of the current function in the mode line. + +@item +Rob Riepel contributed @file{tpu-edt.el} and its associated files, +providing an emulation of the VMS TPU text editor emulating the VMS EDT +editor, and @file{vt-control.el}, providing some control functions for +the DEC VT line of terminals. + +@item +Nick Roberts wrote @file{gdb-ui.el}, the graphical user interface to +GDB. + +@item +Roland B.@: Roberts contributed much of the VMS support distributed with +Emacs 19, along with Joseph M.@: Kelsey, and @file{vms-pmail.el}, support +for using Emacs within VMS MAIL. + +@item +John Robinson wrote @file{bg-mouse.el}, support for the mouse on the BBN +Bitgraph terminal. + +@item +Danny Roozendaal implemented @file{handwrite.el}, which converts text +into ``handwriting.'' + +@item +William Rosenblatt wrote @file{float.el}, implementing a floating-point +numeric type using Lisp cons cells and integers. + +@item +Guillermo J.@: Rozas wrote @file{scheme.el}, a mode for editing Scheme and +DSSSL code, and @file{fakemail.c}, an interface to the System V mailer. + +@item +Ivar Rummelhoff provided @file{winner.el}, which records +recent window configurations so you can move back to them. + +@item +Jason Rumney has ported the Emacs 21 display engine to MS-Windows, and +contributed extensively to the MS-Windows port of Emacs. + +@item +Wolfgang Rupprecht contributed Emacs 19's floating-point support +(including @file{float-sup.el} and @file{floatfns.c}), and +@file{sup-mouse.el}, support for the Supdup mouse on lisp machines. + +@item +Kevin Ryde wrote @file{info-xref.el}, a library for checking +references in Info files. + +@item +James B.@: Salem and Brewster Kahle wrote @file{completion.el}, providing +dynamic word completion. + +@item +Masahiko Sato wrote @file{vip.el}, an emulation of the VI editor. + +@item +Holger Schauer wrote @file{fortune.el}, a package for using fortune in +message signatures. + +@item +William Schelter wrote @file{telnet.el}, support for @code{telnet} +sessions within Emacs. + +@item +Ralph Schleicher contributed @file{battery.el}, a package for displaying +laptop computer battery status, and @file{info-look.el}, a package for +looking up Info documentation for symbols in the buffer. + +@item +Michael Schmidt and Tom Perrine wrote @file{modula2.el}, a mode for +editing Modula-2 code, based on work by Mick Jordan and Peter Robinson. + +@item +Ronald S.@: Schnell wrote @file{dunnet.el}, a text adventure game. + +@item +Philippe Schnoebelen wrote @file{gomoku.el}, a Go Moku game played +against Emacs, and @file{mpuz.el}, a multiplication puzzle. + +@item +Jan Schormann wrote @file{solitaire.el}, an Emacs Lisp implementation of +the Solitaire game. + +@item +Alex Schroeder wrote @file{ansi-color.el}, a package for translating +ANSI color escape sequences to Emacs faces, and @file{sql.el}, a package +for interactively running an SQL interpreter in an Emacs buffer. + +@item +Randal Schwartz wrote @file{pp.el}, a pretty-printer for lisp objects. + +@item +Oliver Seidel wrote @file{todo-mode.el}, a package for maintaining +@file{TODO} list files. + +@item +Manuel Serrano contributed the Flyspell package that does spell checking +as you type. + +@item +Hovav Shacham wrote @file{windmove.el}, a set of commands for selecting +windows based on their geometrical position on the frame. + +@item +Stanislav Shalunov wrote @file{uce.el}, for responding to unsolicited +commercial email. + +@item +Richard Sharman contributed @file{hilit-chg.el}, which uses colors +to show recent editing changes. + +@item +Olin Shivers wrote: + +@itemize @minus +@item +@file{comint.el}, a library for modes running interactive command-line- +oriented subprocesses, +@item +@file{cmuscheme.el}, for running inferior Scheme processes, +@item +@file{inf-lisp.el}, for running inferior Lisp process, and +@item +@file{shell.el}, for running inferior shells. +@end itemize + +@item +Espen Skoglund wrote @file{pascal.el}, a mode for editing Pascal code. + +@item +Rick Sladkey wrote @file{backquote.el}, a lisp macro for creating +mostly-constant data. + +@item +Lynn Slater wrote @file{help-macro.el}, a macro for writing interactive +help for key bindings. + +@item +Chris Smith wrote @file{icon.el}, a mode for editing Icon code. + +@item +David Smith wrote @file{ielm.el}, a mode for interacting with the Emacs +Lisp interpreter as a subprocess. + +@item +Paul D.@: Smith wrote @file{snmp-mode.el}. + +@item +William Sommerfeld wrote @file{scribe.el}, a mode for editing Scribe +files, and @file{server.el}, a package allowing programs to send files +to an extant Emacs job to be edited. + +@item +Andre Spiegel made many contributions to the Emacs Version Control +package, and in particular made it support multiple back ends. + +@item +Michael Staats wrote @file{pc-select.el}, which rebinds keys for +selecting regions to follow many other systems. + +@item +Richard Stallman invented Emacs, and then wrote: + +@itemize @minus +@item +@file{easymenu.el}, a facility for defining Emacs menus, +@item +@file{menu-bar.el}, the Emacs menu bar support code, +@item +@file{paren.el}, a package to make matching parentheses stand out in +color, and +@item +most of the rest of Emacs code. +@end itemize + +@item +Sam Steingold wrote @file{gulp.el}, a facility for asking package +maintainers for updated versions of their packages via e-mail, and +@file{midnight.el}, a package for running a command every midnight. + +@item +Ake Stenhoff and Lars Lindberg wrote @file{imenu.el}, a framework for +browsing indices made from buffer contents. + +@item +Peter Stephenson contributed @file{vcursor.el}, which implements a +``virtual cursor'' that you can move with the keyboard and use for +copying text. + +@item +Ken Stevens wrote the initial version of @file{ispell.el} and maintains +that package since Ispell 3.1 release. + +@item +Jonathan Stigelman wrote @file{hilit19.el}, a package providing +automatic highlighting in source code buffers, mail readers, and other +contexts. + +@item +Kim F.@: Storm made many improvements to the Emacs display engine, +process support, and networking support. He also wrote: + +@itemize @minus +@item +@file{bindat.el}, a package for encoding and decoding binary data. +@item +@file{cua.el}, which allows Emacs to emulate the standard CUA key +bindings. +@item +@file{ido.el}, a package for selecting buffers and files quickly. +@item +@file{kmacro.el}, the keyboard macro facility. +@end itemize + +@item +Martin Stjernholm co-authored CC Mode, a major editing mode for C, +C@t{++}, Objective-C, Java, Pike, CORBA IDL, and AWK code. + +@item +Steve Strassman did not write @file{spook.el}, and even if he did, he +really didn't mean for you to use it in an anarchistic way. + +@item +Olaf Sylvester wrote @file{bs.el}, a package for manipulating Emacs +buffers. + +@item +Tibor @v{S}imko and Milan Zamazal wrote @file{slovak.el}, support for +editing text in Slovak language. + +@item +Naoto Takahashi wrote @file{utf-8.el}, support for encoding and +decoding UTF-8 data. + +@item +Luc Teirlinck wrote @file{help-at-pt.el}, providing local help through +the keyboard. + +@item +Jean-Philippe Theberge wrote @file{thumbs.el}, a package for viewing +image files as ``thumbnails.'' + +@item +Jens T.@: Berger Thielemann wrote @file{word-help.el}, which is +part of the basis for @file{info-look.el}. + +@item +Spencer Thomas wrote the original @file{dabbrev.el}, providing a command +which completes the partial word before point, based on other nearby +words for which it is a prefix. He also wrote the original dumping +support. + +@item +Jim Thompson wrote @file{ps-print.el}, which converts +Emacs text to PostScript. + +@item +Tom Tromey and Chris Lindblad wrote @file{tcl.el}, a major mode for +editing Tcl/Tk source files and running a Tcl interpreter as an Emacs +subprocess. + +@item +Eli Tziperman wrote @file{rmail-spam-filter.el}, a spam filter for RMAIL. +@item +Daiki Ueno wrote @file{starttls.el}, support for Transport Layer +Security protocol, and the PGG package adding GnuPG and PGP support. + +@item +Masanobu Umeda wrote: + +@itemize @minus +@item +GNUS, a feature-full reader for Usenet news, +@item +@file{prolog.el}, a mode for editing Prolog code, +@item +@file{rmailsort.el}, a package for sorting messages in RMAIL folders, +@item +@file{metamail.el}, an interface to the Metamail program, +@item +@file{gnus-kill.el}, the Kill File mode for Gnus, +@item +@file{gnus-mh.el}, an mh-e interface for Gnus, +@item +@file{gnus-msg.el}, a mail and post interface for Gnus, +@item +@file{tcp.el}, emulation of the @code{open-network-stream} function for +some Emacs configurations which lack it, and +@item +@file{timezone.el}, providing functions for dealing with time zones. +@end itemize + +@item +Rajesh Vaidheeswarran wrote @file{whitespace.el}, a package that +detects and cleans up excess whitespace in a file. + +@item +Neil W.@: Van Dyke wrote @file{webjump.el}, a ``hot links'' package. + +@item +Didier Verna contributed @file{rect.el}, a package of functions for +operations on rectangle regions of text. + +@item +Ulrik Vieth implemented @file{meta-mode.el}, for editing MetaFont code. + +@item +Geoffrey Voelker wrote the Windows NT support. He also wrote +@file{dos-w32.el}, functions shared by the MS-DOS and MS-Windows ports +of Emacs, and @file{w32-fns.el}, MS-Windows specific support functions. + +@item +Johan Vromans wrote @file{forms.el} and its associated files, a +mode for filling in forms. + +@item +Colin Walters wrote @file{ibuffer.el}, a Dired-like major mode for +operating on buffers. + +@item +Barry Warsaw wrote: + +@itemize @minus +@item +@file{assoc.el}, a set of utility functions for working with association +lists, +@item +@file{cc-mode.el}, a major mode for editing C, C@t{++}, and Java code, +based on earlier work by Dave Detlefs, Stewart Clamen, and Richard +Stallman, +@item +@file{elp.el}, a new profiler for Emacs Lisp programs. +@item +@file{man.el}, a mode for reading UNIX manual pages, +@item +@file{regi.el}, providing an AWK-like functionality for use in lisp +programs, +@item +@file{reporter.el}, providing customizable bug reporting for lisp +packages, and +@item +@file{supercite.el}, a minor mode for quoting sections of mail messages +and news articles. +@end itemize + +@item +Morten Welinder introduced face support into the MS-DOS port of Emacs, +and also wrote: + +@itemize @minus +@item +@file{desktop.el}, facilities for saving some of Emacs's state between +sessions, +@item +@file{timer.el}, the Emacs facility to run commands at a given time or +frequency, or when Emacs is idle, and its C-level support code, +@item +@file{pc-win.el}, the MS-DOS ``window-system'' support, +@item +@file{internal.el}, an ``internal terminal'' emulator for the MS-DOS +port of Emacs, +@item +@file{arc-mode.el}, the mode for editing compressed archives, +@item +@file{s-region.el}, commands for setting the region using the shift key +and motion commands, and +@item +@file{dos-fns.el}, functions for use under MS-DOS. +@end itemize + +He also helped port Emacs to MS-DOS. + +@item +Joseph Brian Wells wrote: + +@itemize @minus +@item +@file{apropos.el}, a command to find commands, functions, and variables +whose names contain matches for a regular expression, +@item +@file{resume.el}, support for processing command-line arguments after +resuming a suspended Emacs job, and +@item +@file{mail-extr.el}, a package for extracting names and addresses from +mail headers, with contributions from Jamie Zawinski. +@end itemize + +@item +Rodney Whitby and Reto Zimmermann wrote @file{vhdl-mode.el}, a major +mode for editing VHDL source code. + +@item +John Wiegley wrote @file{align.el}, a set of commands for aligning text +according to regular-expression based rules; @file{timeclock.el}, a +package for keeping track of time spent on projects; +@file{pcomplete.el}, a programmable completion facility; and +@code{eshell}, a command shell implemented entirely in Emacs Lisp. + +@item +Ed Wilkinson wrote @file{b2m.c}, a program to convert mail files from +RMAIL format to Unix @code{mbox} format. + +@item +Mike Williams wrote @file{mouse-sel.el}, providing enhanced mouse +selection, and @file{thingatpt.el}, a library of functions for finding +the ``thing'' (word, line, s-expression) containing point. + +@item +Bill Wohler wrote the Emacs interface to the MH mail system. + +@item +Dale R.@: Worley wrote @file{emerge.el}, a package for interactively +merging two versions of a file. + +@item +Francis J.@: Wright wrote @code{WoMan}, a package for browsing +manual pages without the @code{man} command. + +@item +Tom Wurgler wrote @file{emacs-lock.el}, which makes it harder +to exit with valuable buffers unsaved. + +@item +Masatake Yamato wrote @file{ld-script.el}, an editing mode for GNU +linker scripts, and contributed subword handling in CC mode. + +@item +Jonathan Yavner wrote @file{testcover.el}, a package for keeping track +of the testing status of Emacs Lisp code, and the SES spreadsheet +package. + +@item +Ryan Yeske wrote @file{rcirc.el} a simple Internet Relay Chat client. +@item +Ilya Zakharevich and Bob Olson contributed @file{cperl-mode.el}, a major +mode for editing Perl code. Ilya Zakharevich also wrote @file{tmm.el}, +a mode for accessing the Emacs menu bar on a text-mode terminal. + +@item +Milan Zamazal wrote @file{czech.el}, support for editing Czech text, +@file{glasses.el}, a package for easier reading of source code which +uses illegible identifier names such as @code{cantReadThisVariable}, and +@file{tildify.el}, commands for adding hard spaces to text, @TeX{}, and +SGML/HTML files. + +@item +Victor Zandy contributed @file{zone.el}, a package for people who like +to zone out in front of Emacs. + +@item +Eli Zaretskii made many standard Emacs features work on MS-DOS. He also +wrote @file{tty-colors.el}, which implements transparent mapping of X +colors to tty colors, and (together with Kenichi Handa) +@file{codepage.el}, a package for editing text encoded in DOS/Windows +code pages. + +@item +Jamie Zawinski wrote: + +@itemize @minus +@item +Emacs 19's optimizing byte compiler, with Hallvard Furuseth, +@item +much of the support for faces and X selections, +@item +@file{mailabbrev.el}, a package providing automatic expansion of mail +aliases, and +@item +@file{tar-mode.el}, providing simple viewing and editing commands for +tar files. +@end itemize + +@item +Andrew Zhilin created the Emacs icons used beginning with Emacs 22. + +@item +Shenghuo Zhu wrote: + +@itemize @minus +@item +@file{binhex.el}, a package for reading and writing binhex files, +@item +@file{mm-partial.el}, message/partial support for MIME messages, +@item +@file{rfc1843.el}, an HZ decoding package, +@item +@file{uudecode.el}, an Emacs Lisp decoder for uuencoded data, +@item +@file{webmail.el}, an interface to Web mail. +@end itemize + +@item +Ian T.@: Zimmerman wrote @file{gametree.el}. + +@item +Neal Ziring and Felix S.@: T.@: Wu wrote @file{vi.el}, an emulation of the +VI text editor. + +@item +Detlev Zundel wrote @file{re-builder.el}, a package for building regexps +with visual feedback. + +@end itemize + +Others too numerous to mention have reported and fixed bugs, and added +features to many parts of Emacs. (Many are mentioned in the +@file{ChangeLog} files which are summarized in the file @file{AUTHORS} +in the distribution.) We thank them for their generosity as well. + +This list intended to mention every contributor of a major package or +feature we currently distribute; if you know of someone we have omitted, +please report that as a manual bug. + +@ignore + arch-tag: bb1d0fa4-0240-4992-b5d4-8602d1e3d4ba +@end ignore diff --git a/doc/emacs/anti.texi b/doc/emacs/anti.texi new file mode 100644 index 00000000000..ebff1c7677f --- /dev/null +++ b/doc/emacs/anti.texi @@ -0,0 +1,306 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. + +@node Antinews, Mac OS, X Resources, Top +@appendix Emacs 21 Antinews + + For those users who live backwards in time, here is information about +downgrading to Emacs version 21.4. We hope you will enjoy the greater +simplicity that results from the absence of many Emacs @value{EMACSVER} +features. + +@itemize @bullet + +@item +The buffer position and line number are now displayed at the end of +the mode line, where they can be more easily seen. + +@item +The mode line of the selected window is no longer displayed with a +special face. All mode lines are created equal. Meanwhile, you can +use the variable @code{mode-line-inverse-video} to control whether +mode lines are highlighted at all---@code{nil} means don't highlight +them. + +@item +Clicking on a link with the left mouse button (@kbd{mouse-1}) will +always set point at the position clicked, instead of following the +link. If you want to follow the link, use the middle mouse button +(@kbd{mouse-2}). + +@item +Emacs is tired of X droppings. If you drop a file or a piece of text +onto an Emacs window, nothing will happen. + +@item +On an xterm, even if you enable Xterm Mouse mode, Emacs provides a +more convincing simulation of a text terminal by not responding to +mouse clicks on the mode line, header line, or display margin. + +@item +For simplicity, windows always have fringes. We wouldn't want to +in-fringe anyone's windows. Likewise, horizontal scrolling always +works in the same automatic way. + +@item +The horizontal-bar cursor shape has been removed. + +@item +If command line arguments are given, Emacs will not display a splash +screen, so that you can immediately get on with your editing. The +command-line option @samp{--no-splash} is therefore obsolete, and has +been removed. + +@item +These command line options have also been removed: @samp{--color}, +@samp{--fullwidth}, @samp{--fullheight}, @samp{--fullscreen}, +@samp{--no-blinking-cursor}, @samp{--no-desktop}, and @samp{-Q}. + +@item +The @samp{--geometry} option applies only to the initial frame, and +the @samp{-f} option will not read arguments for interactive +functions. + +@item +We have standardized on one location for the user init file: the file +named @file{.emacs} in your home directory. Emacs will not look for +the init file in @file{~/.emacs.d/init.el}. Similarly, don't try +putting @file{.emacs_SHELL} as @file{init_SHELL.sh} in +@file{~/.emacs.d}; Emacs won't find it. + +@item +Emacs will not read @file{~/.abbrev_defs} automatically. If you want +to load abbrev definitions from a file, you must always do so +explicitly. + +@item +When you are logged in as root, all files now give you writable +buffers, reflecting the fact that you can write any files. + +@item +The maximum size of buffers and integer variables has been halved. On +32-bit machines, the maximum buffer size is now 128 megabytes. + +@item +An unquoted @samp{$} in a file name is now an error, if the following +name is not recognized as an environment variable. Thus, +the file name @file{foo$bar} would probably be an error. Meanwhile, +the @code{setenv} command does not expand @samp{$} at all. + +@item +If a single command accumulates too much undo information, Emacs never +discards it. If Emacs runs out of memory as a result, it will handle +this by crashing. + +@item +Many commands have been removed from the menus or rearranged. + +@item +The @kbd{C-h} (help) subcommands have been rearranged---especially +those that display specific files. Type @kbd{C-h C-h} to see a list +of these commands; that will show you what is different. + +@item +The @kbd{C-h v} and @kbd{C-h f} commands no longer show a hyperlink to +the C source code, even if it is available. If you want to find the +source code, grep for it. + +@item +The apropos commands will not accept a list of words to match, in +order to encourage you to be more specific. Also, the user option +@code{apropos-sort-by-scores} has been removed. + +@item +The minibuffer prompt is now displayed using the default face. +The colon is enough to show you what part is the prompt. + +@item +Minibuffer completion commands always complete the entire minibuffer +contents, just as if you had typed them at the end of the minibuffer, +no matter where point is actually located. + +@item +The command @code{backward-kill-sexp} is now bound to @kbd{C-M-delete} +and @kbd{C-M-backspace}. Be careful when using these key sequences! +It may shut down your X server, or reboot your operating system. + +@item +Commands to set the mark at a place away from point, including +@kbd{M-@@}, @kbd{M-h}, etc., don't do anything special when you repeat +them. In most cases, typing these commands multiple times is +equivalent to typing them once. @kbd{M-h} ignores numeric arguments. + +@item +The user option @code{set-mark-command-repeat-pop} has been removed. + +@item +@kbd{C-@key{SPC} C-@key{SPC}} has no special meaning--it just sets the +mark twice. Neither does @kbd{C-u C-x C-x}, which simply exchanges +point and mark like @kbd{C-x C-x}. + +@item +The function @code{sentence-end} has been eliminated in favor of a +more straightforward approach: directly setting the variable +@code{sentence-end}. For example, to end each sentence with a single +space, use + +@lisp +(setq sentence-end "[.?!][]\"')@}]*\\($\\|[ \t]\\)[ \t\n]*") +@end lisp + +@item +The variable @code{fill-nobreak-predicate} is no longer customizable, +and it can only hold a single function. + +@item +Nobreak spaces and hyphens are displayed just like normal characters, +and the user option @code{nobreak-char-display} has been removed. + +@item +@kbd{C-w} in an incremental search always grabs an entire word +into the search string. More precisely, it grabs text through +the next end of a word. + +@item +Yanking now preserves all text properties that were in the killed +text. The variable @code{yank-excluded-properties} has been removed. + +@item +Occur mode, Info mode, and Comint-derived modes now control +fontification in their own way, and @kbd{M-x font-lock-mode} has +nothing to do with it. To control fontification in Info mode, use the +variable @code{Info-fontify}. + +@item +@samp{M-x shell} is now completely standard in regard to scrolling +behavior. It no longer has the option of scrolling the input line to +the bottom of the window the way a text terminal running a shell does. + +@item +The Grep package has been merged with Compilation mode. Many +grep-specific commands and user options have thus been eliminated. +Also, @kbd{M-x grep} never tries the GNU grep @samp{-H} option, +and instead silently appends @file{/dev/null} to the command line. + +@item +In Dired's @kbd{!} command, @samp{*} and @samp{?} now +cause substitution of the file names wherever they appear---not +only when they are surrounded by whitespace. + +@item +When a file is managed with version control, the command @kbd{C-x C-q} +(whose general meaning is to make a buffer read-only or writable) now +does so by checking the file in or out. Checking the file out makes +the buffer writable; checking it in makes the buffer read-only. + +You can still use @kbd{C-x v v} to do these operations if you wish; +its meaning is unchanged. If you want to control the buffer's +read-only flag without performing any version control operation, +use @kbd{M-x toggle-read-only}. + +@item +SGML mode does not handle XML syntax, and does not have indentation +support. + +@item +Many Info mode commands have been removed. Incremental search in Info +searches only the current node. + +@item +Many @code{etags} features for customizing parsing using regexps +have been removed. + +@item +The Emacs server now runs a small C program called @file{emacsserver}, +rather than trying to handle everything in Emacs Lisp. Now there can +only be one Emacs server running at a time. The @code{server-mode} +command and @code{server-name} user option have been eliminated. + +@item +The @file{emacsclient} program no longer accepts the @samp{--eval}, +@samp{--display} and @samp{--server-file} command line options, and +can only establish local connections using Unix domain sockets. + +@item +The command @code{quail-show-key}, for showing how to input a +character, has been removed. + +@item +The default value of @code{keyboard-coding-system} is always +@code{nil}, regardless of your locale settings. If you want some +other value, set it yourself. + +@item +Unicode support and unification between Latin-@var{n} character sets +have been removed. Cutting and pasting X selections does not support +``extended segments'', so there are certain coding systems it cannot +handle. + +@item +The input methods for Emacs are included in a separate distribution +called ``Leim.'' To use this, you must extract the Leim tar file on +top of the Emacs distribution, into the same directory, before you +build Emacs. + +@item +The following input methods have been eliminated: belarusian, +bulgarian-bds, bulgarian-phonetic, chinese-sisheng, croatian, dutch, +georgian, latin-alt-postfix, latin-postfix, latin-prefix, +latvian-keyboard, lithuanian-numeric, lithuanian-keyboard, +malayalam-inscript, rfc1345, russian-computer, sgml, slovenian, +tamil-inscript ucs, ukrainian-computer, vietnamese-telex, and welsh. + +@item +The following language environments have been eliminated: Belarusian, +Bulgarian, Chinese-EUC-TW, Croatian, French, Georgian, Italian, +Latin-6, Latin-7, Latvian, Lithuanian, Malayalam, Russian, Russian, +Slovenian, Swedish, Tajik, Tamil, UTF-8, Ukrainian, Ukrainian, Welsh, +and Windows-1255. + +@item +The @code{code-pages} library, which contained various 8-bit coding +systems, has been removed. + +@item +The Kmacro package has been replaced with a simple and elegant +keyboard macro system. Use @kbd{C-x (} to start a new keyboard macro, +@kbd{C-x )} to end the macro, and @kbd{C-x e} to execute the last +macro. Use @kbd{M-x name-last-kbd-macro} to name the most recently +defined macro. + +@item +Emacs no longer displays your breakpoints in the source buffer, so you +have to remember where you left them. It can be difficult to inspect +the state of your debugged program from the command line, so Emacs +tries to demonstrate this in the GUD buffer. + +@item +The Calc, CUA, Ibuffer, Ido, Password, Printing, Reveal, +Ruler-mode, SES, Table, Tramp, and URL packages have been removed. +The Benchmark, Cfengine, Conf, Dns, Flymake, Python, Thumbs, and +Wdired modes have also been removed. + +@item +The Emacs Lisp Reference Manual and the Introduction to Programming in +Emacs Lisp are now distributed separately, not in the Emacs +distribution. + +@item +On MS Windows, there is no longer any support for tooltips, images, +sound, different mouse pointer shapes, or pointing devices with more +than 3 buttons. If you want these features, consider switching to +another operating system. But even if you don't want these features, +you should still switch---for freedom's sake. + +@item +Emacs will not use Unicode for clipboard operations on MS Windows. + +@item +To keep up with decreasing computer memory capacity and disk space, many +other functions and files have been eliminated in Emacs 21.4. +@end itemize + +@ignore + arch-tag: 32932bd9-46f5-41b2-8a0e-fb0cc4caeb29 +@end ignore diff --git a/doc/emacs/arevert-xtra.texi b/doc/emacs/arevert-xtra.texi new file mode 100644 index 00000000000..c2b1ddc2ffe --- /dev/null +++ b/doc/emacs/arevert-xtra.texi @@ -0,0 +1,191 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@c +@c This file is included either in emacs-xtra.texi (when producing the +@c printed version) or in the main Emacs manual (for the on-line version). +@node Autorevert +@section Auto Reverting non-file Buffers + +Normally Global Auto Revert Mode only reverts file buffers. There are +two ways to auto-revert certain non-file buffers: enabling Auto Revert +Mode in those buffers (using @kbd{M-x auto-revert-mode}) and setting +@code{global-auto-revert-non-file-buffers} to @code{t}. The latter +enables Auto Reverting for all types of buffers for which it is +implemented, that is, for the types of buffers listed in the menu +below. + +Like file buffers, non-file buffers should normally not revert while +you are working on them, or while they contain information that might +get lost after reverting. Therefore, they do not revert if they are +``modified''. This can get tricky, because deciding when a non-file +buffer should be marked modified is usually more difficult than for +file buffers. + +Another tricky detail is that, for efficiency reasons, Auto Revert +often does not try to detect all possible changes in the buffer, only +changes that are ``major'' or easy to detect. Hence, enabling +auto-reverting for a non-file buffer does not always guarantee that +all information in the buffer is up to date and does not necessarily +make manual reverts useless. + +At the other extreme, certain buffers automatically auto-revert every +@code{auto-revert-interval} seconds. (This currently only applies to +the Buffer Menu.) In this case, Auto Revert does not print any +messages while reverting, even when @code{auto-revert-verbose} is +non-@code{nil}. + +The details depend on the particular types of buffers and are +explained in the corresponding sections. + +@menu +* Auto Reverting the Buffer Menu:: +* Auto Reverting Dired:: +* Supporting additional buffers:: +@end menu + +@node Auto Reverting the Buffer Menu +@subsection Auto Reverting the Buffer Menu + +If auto-reverting of non-file buffers is enabled, the Buffer Menu +automatically reverts every @code{auto-revert-interval} seconds, +whether there is a need for it or not. (It would probably take longer +to check whether there is a need than to actually revert.) + +If the Buffer Menu inappropriately gets marked modified, just revert +it manually using @kbd{g} and auto-reverting will resume. However, if +you marked certain buffers to get deleted or to be displayed, you have +to be careful, because reverting erases all marks. The fact that +adding marks sets the buffer's modified flag prevents Auto Revert from +automatically erasing the marks. + +@node Auto Reverting Dired +@subsection Auto Reverting Dired buffers + +Auto-reverting Dired buffers currently works on GNU or Unix style +operating systems. It may not work satisfactorily on some other +systems. + +Dired buffers only auto-revert when the file list of the buffer's main +directory changes. They do not auto-revert when information about a +particular file changes or when inserted subdirectories change. To be +sure that @emph{all} listed information is up to date, you have to +manually revert using @kbd{g}, @emph{even} if auto-reverting is +enabled in the Dired buffer. Sometimes, you might get the impression +that modifying or saving files listed in the main directory actually +does cause auto-reverting. This is because making changes to a file, +or saving it, very often causes changes in the directory itself, for +instance, through backup files or auto-save files. However, this is +not guaranteed. + +If the Dired buffer is marked modified and there are no changes you +want to protect, then most of the time you can make auto-reverting +resume by manually reverting the buffer using @kbd{g}. There is one +exception. If you flag or mark files, you can safely revert the +buffer. This will not erase the flags or marks (unless the marked +file has been deleted, of course). However, the buffer will stay +modified, even after reverting, and auto-reverting will not resume. +This is because, if you flag or mark files, you may be working on the +buffer and you might not want the buffer to change without warning. +If you want auto-reverting to resume in the presence of marks and +flags, mark the buffer non-modified using @kbd{M-~}. However, adding, +deleting or changing marks or flags will mark it modified again. + +Remote Dired buffers are not auto-reverted. Neither are Dired buffers +for which you used shell wildcards or file arguments to list only some +of the files. @samp{*Find*} and @samp{*Locate*} buffers do not +auto-revert either. + +@node Supporting additional buffers +@subsection Adding Support for Auto-Reverting additional Buffers. + +This section is intended for Elisp programmers who would like to add +support for auto-reverting new types of buffers. + +To support auto-reverting the buffer must first of all have a +@code{revert-buffer-function}. @xref{Definition of +revert-buffer-function,, Reverting, elisp, the Emacs Lisp Reference Manual}. + +In addition, it @emph{must} have a @code{buffer-stale-function}. + +@defvar buffer-stale-function +The value of this variable is a function to check whether a non-file +buffer needs reverting. This should be a function with one optional +argument @var{noconfirm}. The function should return non-@code{nil} +if the buffer should be reverted. The buffer is current when this +function is called. + +While this function is mainly intended for use in auto-reverting, it +could be used for other purposes as well. For instance, if +auto-reverting is not enabled, it could be used to warn the user that +the buffer needs reverting. The idea behind the @var{noconfirm} +argument is that it should be @code{t} if the buffer is going to be +reverted without asking the user and @code{nil} if the function is +just going to be used to warn the user that the buffer is out of date. +In particular, for use in auto-reverting, @var{noconfirm} is @code{t}. +If the function is only going to be used for auto-reverting, you can +ignore the @var{noconfirm} argument. + +If you just want to automatically auto-revert every +@code{auto-revert-interval} seconds, use: + +@example +(set (make-local-variable 'buffer-stale-function) + #'(lambda (&optional noconfirm) 'fast)) +@end example + +@noindent +in the buffer's mode function. + +The special return value @samp{fast} tells the caller that the need +for reverting was not checked, but that reverting the buffer is fast. +It also tells Auto Revert not to print any revert messages, even if +@code{auto-revert-verbose} is non-@code{nil}. This is important, as +getting revert messages every @code{auto-revert-interval} seconds can +be very annoying. The information provided by this return value could +also be useful if the function is consulted for purposes other than +auto-reverting. +@end defvar + +Once the buffer has a @code{revert-buffer-function} and a +@code{buffer-stale-function}, several problems usually remain. + +The buffer will only auto-revert if it is marked unmodified. Hence, +you will have to make sure that various functions mark the buffer +modified if and only if either the buffer contains information that +might be lost by reverting or there is reason to believe that the user +might be inconvenienced by auto-reverting, because he is actively +working on the buffer. The user can always override this by manually +adjusting the modified status of the buffer. To support this, calling +the @code{revert-buffer-function} on a buffer that is marked +unmodified should always keep the buffer marked unmodified. + +It is important to assure that point does not continuously jump around +as a consequence of auto-reverting. Of course, moving point might be +inevitable if the buffer radically changes. + +You should make sure that the @code{revert-buffer-function} does not +print messages that unnecessarily duplicate Auto Revert's own messages +if @code{auto-revert-verbose} is @code{t} and effectively override a +@code{nil} value for @code{auto-revert-verbose}. Hence, adapting a +mode for auto-reverting often involves getting rid of such messages. +This is especially important for buffers that automatically +auto-revert every @code{auto-revert-interval} seconds. + +Also, you may want to update the documentation string of +@code{global-auto-revert-non-file-buffers}. + +@ifinfo +Finally, you should add a node to this chapter's menu. This node +@end ifinfo +@ifnotinfo +Finally, you should add a section to this chapter. This section +@end ifnotinfo +should at the very least make clear whether enabling auto-reverting +for the buffer reliably assures that all information in the buffer is +completely up to date (or will be after @code{auto-revert-interval} +seconds). + +@ignore + arch-tag: 2983e613-a272-45f6-9593-3010ad7f865e +@end ignore diff --git a/doc/emacs/basic.texi b/doc/emacs/basic.texi new file mode 100644 index 00000000000..333985e4a4a --- /dev/null +++ b/doc/emacs/basic.texi @@ -0,0 +1,776 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Basic, Minibuffer, Exiting, Top +@chapter Basic Editing Commands + +@kindex C-h t +@findex help-with-tutorial + Here we explain the basics of how to enter text, make corrections, +and save the text in a file. If this material is new to you, we +suggest you first run the Emacs learn-by-doing tutorial, by typing +@kbd{Control-h t} inside Emacs. (@code{help-with-tutorial}). + + To clear and redisplay the screen, type @kbd{C-l} (@code{recenter}). + +@menu + +* Inserting Text:: Inserting text by simply typing it. +* Moving Point:: Moving the cursor to the place where you want to + change something. +* Erasing:: Deleting and killing text. +* Basic Undo:: Undoing recent changes in the text. +* Files: Basic Files. Visiting, creating, and saving files. +* Help: Basic Help. Asking what a character does. +* Blank Lines:: Making and deleting blank lines. +* Continuation Lines:: How Emacs displays lines too wide for the screen. +* Position Info:: What page, line, row, or column is point on? +* Arguments:: Numeric arguments for repeating a command N times. +* Repeating:: Repeating the previous command quickly. +@end menu + +@node Inserting Text +@section Inserting Text + +@cindex insertion +@cindex graphic characters + Typing printing characters inserts them into the text you are +editing. It inserts them into the buffer at the cursor; more +precisely, it inserts them at @dfn{point}, but the cursor normally +shows where point is. @xref{Point}. + + Insertion moves the cursor forward, and the following text moves +forward with the cursor. If the text in the buffer is @samp{FOOBAR}, +with the cursor before the @samp{B}, and you type @kbd{XX}, you get +@samp{FOOXXBAR}, with the cursor still before the @samp{B}. + + To @dfn{delete} text you have just inserted, use the large key +labeled @key{DEL}, @key{BACKSPACE} or @key{DELETE} which is a short +distance above the @key{RET} or @key{ENTER} key. Regardless of the +label on that key, Emacs thinks of it as @key{DEL}, and that's what we +call it in this manual. @key{DEL} is the key you normally use outside +Emacs to erase the last character that you typed. + + The @key{DEL} key deletes the character @emph{before} the cursor. +As a consequence, the cursor and all the characters after it move +backwards. If you type a printing character and then type @key{DEL}, +they cancel out. + + On most computers, Emacs sets up @key{DEL} automatically. In some +cases, especially with text-only terminals, Emacs may guess wrong. If +the key that ought to erase the last character doesn't do it in Emacs, +see @ref{DEL Does Not Delete}. + + Most PC keyboards have both a @key{BACKSPACE} key a little ways +above @key{RET} or @key{ENTER}, and a @key{DELETE} key elsewhere. On +these keyboards, Emacs tries to set up @key{BACKSPACE} as @key{DEL}. +The @key{DELETE} key deletes ``forwards'' like @kbd{C-d} (see below), +which means it deletes the character underneath the cursor (after +point). + +@kindex RET +@cindex newline + To end a line and start typing a new one, type @key{RET}. (This +key may be labeled @key{RETURN} or @key{ENTER}, but in Emacs we call +it @key{RET}.) This inserts a newline character in the buffer. If +point is at the end of the line, this creates a new blank line after +it. If point is in the middle of a line, the effect is to split that +line. Typing @key{DEL} when the cursor is at the beginning of a line +deletes the preceding newline character, thus joining the line with +the one before it. + + Emacs can split lines automatically when they become too long, if +you turn on a special minor mode called @dfn{Auto Fill} mode. +@xref{Filling}, for Auto Fill mode and other methods of @dfn{filling} +text. + + If you prefer printing characters to replace (overwrite) existing +text, rather than shove it to the right, you should enable Overwrite +mode, a minor mode. @xref{Minor Modes}. + +@cindex quoting +@kindex C-q +@findex quoted-insert + Only printing characters and @key{SPC} insert themselves in Emacs. +Other characters act as editing commands and do not insert themselves. +These include control characters, and characters with codes above 200 +octal. If you need to insert one of these characters in the buffer, +you must @dfn{quote} it by typing the character @kbd{Control-q} +(@code{quoted-insert}) first. (This character's name is normally +written @kbd{C-q} for short.) There are two ways to use +@kbd{C-q}: + +@itemize @bullet +@item +@kbd{C-q} followed by any non-graphic character (even @kbd{C-g}) +inserts that character. + +@item +@kbd{C-q} followed by a sequence of octal digits inserts the character +with the specified octal character code. You can use any number of +octal digits; any non-digit terminates the sequence. If the +terminating character is @key{RET}, it serves only to terminate the +sequence. Any other non-digit terminates the sequence and then acts +as normal input---thus, @kbd{C-q 1 0 1 B} inserts @samp{AB}. + +The use of octal sequences is disabled in ordinary non-binary +Overwrite mode, to give you a convenient way to insert a digit instead +of overwriting with it. +@end itemize + +@cindex 8-bit character codes +@noindent +When multibyte characters are enabled, if you specify a code in the +range 0200 through 0377 octal, @kbd{C-q} assumes that you intend to +use some ISO 8859-@var{n} character set, and converts the specified +code to the corresponding Emacs character code. @xref{Enabling +Multibyte}. You select @emph{which} of the ISO 8859 character sets to +use through your choice of language environment (@pxref{Language +Environments}). + +@vindex read-quoted-char-radix +To use decimal or hexadecimal instead of octal, set the variable +@code{read-quoted-char-radix} to 10 or 16. If the radix is greater than +10, some letters starting with @kbd{a} serve as part of a character +code, just like digits. + +A numeric argument tells @kbd{C-q} how many copies of the quoted +character to insert (@pxref{Arguments}). + +@findex newline +@findex self-insert + Customization information: @key{DEL} in most modes runs the command +@code{delete-backward-char}; @key{RET} runs the command +@code{newline}, and self-inserting printing characters run the command +@code{self-insert}, which inserts whatever character you typed. Some +major modes rebind @key{DEL} to other commands. + +@node Moving Point +@section Changing the Location of Point + +@cindex arrow keys +@cindex moving point +@cindex movement +@cindex cursor motion +@cindex moving the cursor + To do more than insert characters, you have to know how to move point +(@pxref{Point}). The simplest way to do this is with arrow keys, or by +clicking the left mouse button where you want to move to. + + There are also control and meta characters for cursor motion. Some +are equivalent to the arrow keys (it is faster to use these control +keys than move your hand over to the arrow keys). Others do more +sophisticated things. + +@kindex C-a +@kindex C-e +@kindex C-f +@kindex C-b +@kindex C-n +@kindex C-p +@kindex M-> +@kindex M-< +@kindex M-r +@kindex LEFT +@kindex RIGHT +@kindex UP +@kindex DOWN +@findex move-beginning-of-line +@findex move-end-of-line +@findex forward-char +@findex backward-char +@findex next-line +@findex previous-line +@findex beginning-of-buffer +@findex end-of-buffer +@findex goto-char +@findex goto-line +@findex move-to-window-line +@table @kbd +@item C-a +Move to the beginning of the line (@code{move-beginning-of-line}). +@item C-e +Move to the end of the line (@code{move-end-of-line}). +@item C-f +Move forward one character (@code{forward-char}). The right-arrow key +does the same thing. +@item C-b +Move backward one character (@code{backward-char}). The left-arrow +key has the same effect. +@item M-f +Move forward one word (@code{forward-word}). +@item M-b +Move backward one word (@code{backward-word}). +@item C-n +Move down one line vertically (@code{next-line}). This command +attempts to keep the horizontal position unchanged, so if you start in +the middle of one line, you move to the middle of the next. The +down-arrow key does the same thing. +@item C-p +Move up one line, vertically (@code{previous-line}). The up-arrow key +has the same effect. This command preserves position within the line, +like @kbd{C-n}. +@item M-r +Move point to left margin, vertically centered in the window +(@code{move-to-window-line}). Text does not move on the screen. +A numeric argument says which screen line to place point on, counting +downward from the top of the window (zero means the top line). A +negative argument counts lines up from the bottom (@minus{}1 means the +bottom line). +@item M-< +Move to the top of the buffer (@code{beginning-of-buffer}). With +numeric argument @var{n}, move to @var{n}/10 of the way from the top. +@xref{Arguments}, for more information on numeric arguments.@refill +@item M-> +Move to the end of the buffer (@code{end-of-buffer}). +@item C-v +@itemx @key{PAGEDOWN} +@itemx @key{PRIOR} +Scroll the display one screen forward, and move point if necessary to +put it on the screen (@code{scroll-up}). This doesn't always move +point, but it is commonly used to do so. If your keyboard has a +@key{PAGEDOWN} or @key{PRIOR} key, it does the same thing. + +Scrolling commands are described further in @ref{Scrolling}. +@item M-v +@itemx @key{PAGEUP} +@itemx @key{NEXT} +Scroll one screen backward, and move point if necessary to put it on +the screen (@code{scroll-down}). This doesn't always move point, but +it is commonly used to do so. If your keyboard has a @key{PAGEUP} or +@key{NEXT} key, it does the same thing. +@item M-x goto-char +Read a number @var{n} and move point to buffer position @var{n}. +Position 1 is the beginning of the buffer. +@item M-g M-g +@itemx M-g g +@itemx M-x goto-line +Read a number @var{n} and move point to the beginning of line number +@var{n}. Line 1 is the beginning of the buffer. If point is on or +just after a number in the buffer, and you type @key{RET} with the +minibuffer empty, that number is used for @var{n}. +@item C-x C-n +@findex set-goal-column +@kindex C-x C-n +Use the current column of point as the @dfn{semipermanent goal column} +for @kbd{C-n} and @kbd{C-p} (@code{set-goal-column}). When a +semipermanent goal column is in effect, those commands always try to +move to this column, or as close as possible to it, after moving +vertically. The goal column remains in effect until canceled. +@item C-u C-x C-n +Cancel the goal column. Henceforth, @kbd{C-n} and @kbd{C-p} try to +preserve the horizontal position, as usual. +@end table + +@vindex track-eol + If you set the variable @code{track-eol} to a non-@code{nil} value, +then @kbd{C-n} and @kbd{C-p}, when starting at the end of the line, move +to the end of another line. Normally, @code{track-eol} is @code{nil}. +@xref{Variables}, for how to set variables such as @code{track-eol}. + +@vindex next-line-add-newlines + @kbd{C-n} normally stops at the end of the buffer when you use it on +the last line of the buffer. However, if you set the variable +@code{next-line-add-newlines} to a non-@code{nil} value, @kbd{C-n} on +the last line of a buffer creates an additional line at the end and +moves down into it. + +@node Erasing +@section Erasing Text + +@table @kbd +@item @key{DEL} +Delete the character before point (@code{delete-backward-char}). +@item C-d +Delete the character after point (@code{delete-char}). +@item @key{DELETE} +@itemx @key{BACKSPACE} +One of these keys, whichever is the large key above the @key{RET} or +@key{ENTER} key, deletes the character before point---it is @key{DEL}. +If @key{BACKSPACE} is @key{DEL}, and your keyboard also has @key{DELETE}, +then @key{DELETE} deletes forwards, like @kbd{C-d}. +@item C-k +Kill to the end of the line (@code{kill-line}). +@item M-d +Kill forward to the end of the next word (@code{kill-word}). +@item M-@key{DEL} +Kill back to the beginning of the previous word +(@code{backward-kill-word}). +@end table + +@cindex killing characters and lines +@cindex deleting characters and lines +@cindex erasing characters and lines + You already know about the @key{DEL} key which deletes the character +before point (that is, before the cursor). Another key, @kbd{Control-d} +(@kbd{C-d} for short), deletes the character after point (that is, the +character that the cursor is on). This shifts the rest of the text on +the line to the left. If you type @kbd{C-d} at the end of a line, it +joins that line with the following line. + + To erase a larger amount of text, use the @kbd{C-k} key, which +erases (kills) a line at a time. If you type @kbd{C-k} at the +beginning or middle of a line, it kills all the text up to the end of +the line. If you type @kbd{C-k} at the end of a line, it joins that +line with the following line. + + @xref{Killing}, for more flexible ways of killing text. + +@node Basic Undo +@section Undoing Changes + + Emacs records a list of changes made in the buffer text, so you can +you can undo recent changes, as far as the records go. +Usually each editing command makes a separate entry in the undo +records, but sometimes an entry covers just part of a command, and +very simple commands may be grouped. + +@table @kbd +@item C-x u +Undo one entry of the undo records---usually, one command worth +(@code{undo}). +@item C-_ +@itemx C-/ +The same. +@end table + + The command @kbd{C-x u} (or @kbd{C-_} or @kbd{C-/}) is how you undo. +Normally this command undoes the last change, and moves point back to +where it was before the change. + + If you repeat @kbd{C-x u} (or its aliases), each repetition undoes +another, earlier change, back to the limit of the undo information +available. If all recorded changes have already been undone, the undo +command displays an error message and does nothing. + + The undo command applies only to changes in the buffer; you can't +use it to undo mere cursor motion. However, some cursor motion +commands set the mark, so if you use these commands from time to time, +you can move back to the neighborhoods you have moved through by +popping the mark ring (@pxref{Mark Ring}). + +@node Basic Files +@section Files + + Text that you insert in an Emacs buffer lasts only as long as the +Emacs session. To keep any text permanently you must put it in a +@dfn{file}. Files are named units of text which are stored by the +operating system for you to retrieve later by name. To use the +contents of a file in any way, you must specify the file name. That +includes editing the file with Emacs. + + Suppose there is a file named @file{test.emacs} in your home +directory. To begin editing this file in Emacs, type + +@example +C-x C-f test.emacs @key{RET} +@end example + +@noindent +Here the file name is given as an @dfn{argument} to the command @kbd{C-x +C-f} (@code{find-file}). That command uses the @dfn{minibuffer} to +read the argument, and you type @key{RET} to terminate the argument +(@pxref{Minibuffer}). + + Emacs obeys this command by @dfn{visiting} the file: it creates a +buffer, it copies the contents of the file into the buffer, and then +displays the buffer for editing. If you alter the text, you can +@dfn{save} the new text in the file by typing @kbd{C-x C-s} +(@code{save-buffer}). This copies the altered buffer contents back +into the file @file{test.emacs}, making them permanent. Until you +save, the changed text exists only inside Emacs, and the file +@file{test.emacs} is unaltered. + + To create a file, just visit it with @kbd{C-x C-f} as if it already +existed. This creates an empty buffer, in which you can insert the +text you want to put in the file. Emacs actually creates the file the +first time you save this buffer with @kbd{C-x C-s}. + + To learn more about using files in Emacs, see @ref{Files}. + +@node Basic Help +@section Help + +@cindex getting help with keys + If you forget what a key does, you can find out with the Help +character, which is @kbd{C-h} (or @key{F1}, which is an alias for +@kbd{C-h}). Type @kbd{C-h k} followed by the key of interest; for +example, @kbd{C-h k C-n} tells you what @kbd{C-n} does. @kbd{C-h} is +a prefix key; @kbd{C-h k} is just one of its subcommands (the command +@code{describe-key}). The other subcommands of @kbd{C-h} provide +different kinds of help. Type @kbd{C-h} twice to get a description of +all the help facilities. @xref{Help}. + +@node Blank Lines +@section Blank Lines + +@cindex inserting blank lines +@cindex deleting blank lines + Here are special commands and techniques for inserting and deleting +blank lines. + +@table @kbd +@item C-o +Insert one or more blank lines after the cursor (@code{open-line}). +@item C-x C-o +Delete all but one of many consecutive blank lines +(@code{delete-blank-lines}). +@end table + +@kindex C-o +@kindex C-x C-o +@cindex blank lines +@findex open-line +@findex delete-blank-lines + To insert a new line of text before an existing line, +type the new line of text, followed by @key{RET}. +However, it may be easier to see what you are doing if you first make a +blank line and then insert the desired text into it. This is easy to do +using the key @kbd{C-o} (@code{open-line}), which inserts a newline +after point but leaves point in front of the newline. After @kbd{C-o}, +type the text for the new line. @kbd{C-o F O O} has the same effect as +@w{@kbd{F O O @key{RET}}}, except for the final location of point. + + You can make several blank lines by typing @kbd{C-o} several times, or +by giving it a numeric argument specifying how many blank lines to make. +@xref{Arguments}, for how. If you have a fill prefix, the @kbd{C-o} +command inserts the fill prefix on the new line, if typed at the +beginning of a line. @xref{Fill Prefix}. + + The easy way to get rid of extra blank lines is with the command +@kbd{C-x C-o} (@code{delete-blank-lines}). @kbd{C-x C-o} in a run of +several blank lines deletes all but one of them. @kbd{C-x C-o} on a +lone blank line deletes that one. When point is on a nonblank line, +@kbd{C-x C-o} deletes all following blank lines (if any). + +@node Continuation Lines +@section Continuation Lines + +@cindex continuation line +@cindex wrapping +@cindex line wrapping +@cindex fringes, and continuation lines + When a text line is too long to fit in one screen line, Emacs +displays it on two or more screen lines. This is called +@dfn{continuation} or @dfn{line wrapping}. On graphical displays, +Emacs indicates line wrapping with small bent arrows in the left and +right window fringes. On text-only terminals, Emacs displays a +@samp{\} character at the right margin of a screen line if it is not +the last in its text line. This @samp{\} character says that the +following screen line is not really a new text line. + + When line wrapping occurs just before a character that is wider than one +column, some columns at the end of the previous screen line may be +``empty.'' In this case, Emacs displays additional @samp{\} +characters in the ``empty'' columns before the @samp{\} +character that indicates continuation. + + Continued lines can be difficult to read, since lines can break in +the middle of a word. If you prefer, you can make Emacs insert a +newline automatically when a line gets too long, by using Auto Fill +mode. Or enable Long Lines mode, which ensures that wrapping only +occurs between words. @xref{Filling}. + +@cindex truncation +@cindex line truncation, and fringes + Emacs can optionally @dfn{truncate} long lines---this means +displaying just one screen line worth, and the rest of the long line +does not appear at all. @samp{$} in the last column or a small +straight arrow in the window's right fringe indicates a truncated +line. + + @xref{Line Truncation}, for more about line truncation, +and other variables that control how text is displayed. + +@node Position Info +@section Cursor Position Information + + Here are commands to get information about the size and position of +parts of the buffer, and to count lines. + +@table @kbd +@item M-x what-page +Display the page number of point, and the line number within that page. +@item M-x what-line +Display the line number of point in the whole buffer. +@item M-x line-number-mode +@itemx M-x column-number-mode +Toggle automatic display of the current line number or column number. +@xref{Optional Mode Line}. +@item M-= +Display the number of lines in the current region (@code{count-lines-region}). +@xref{Mark}, for information about the region. +@item C-x = +Display the character code of character after point, character position of +point, and column of point (@code{what-cursor-position}). +@item M-x hl-line-mode +Enable or disable highlighting of the current line. @xref{Cursor +Display}. +@item M-x size-indication-mode +Toggle automatic display of the size of the buffer. +@xref{Optional Mode Line}. +@end table + +@findex what-page +@findex what-line +@cindex line number commands +@cindex location of point +@cindex cursor location +@cindex point location + @kbd{M-x what-line} displays the current line number +in the echo area. You can also see the current line number in the +mode line; see @ref{Mode Line}; but if you narrow the buffer, the +line number in the mode line is relative to the accessible portion +(@pxref{Narrowing}). By contrast, @code{what-line} shows both the +line number relative to the narrowed region and the line number +relative to the whole buffer. + + @kbd{M-x what-page} counts pages from the beginning of the file, and +counts lines within the page, showing both numbers in the echo area. +@xref{Pages}. + +@kindex M-= +@findex count-lines-region + Use @kbd{M-=} (@code{count-lines-region}) to displays the number of +lines in the region (@pxref{Mark}). @xref{Pages}, for the command +@kbd{C-x l} which counts the lines in the current page. + +@kindex C-x = +@findex what-cursor-position + The command @kbd{C-x =} (@code{what-cursor-position}) shows what +cursor's column position, and other information about point and the +character after it. It displays a line in the echo area that looks +like this: + +@smallexample +Char: c (99, #o143, #x63) point=28062 of 36168 (78%) column=53 +@end smallexample + + The four values after @samp{Char:} describe the character that follows +point, first by showing it and then by giving its character code in +decimal, octal and hex. For a non-@acronym{ASCII} multibyte character, these are +followed by @samp{file} and the character's representation, in hex, in +the buffer's coding system, if that coding system encodes the character +safely and with a single byte (@pxref{Coding Systems}). If the +character's encoding is longer than one byte, Emacs shows @samp{file ...}. + + However, if the character displayed is in the range 0200 through +0377 octal, it may actually stand for an invalid UTF-8 byte read from +a file. In Emacs, that byte is represented as a sequence of 8-bit +characters, but all of them together display as the original invalid +byte, in octal code. In this case, @kbd{C-x =} shows @samp{part of +display ...} instead of @samp{file}. + + @samp{point=} is followed by the position of point expressed as a +character count. The start of the buffer is position 1, one character +later is position 2, and so on. The next, larger, number is the total +number of characters in the buffer. Afterward in parentheses comes +the position expressed as a percentage of the total size. + + @samp{column=} is followed by the horizontal position of point, in +columns from the left edge of the window. + + If the buffer has been narrowed, making some of the text at the +beginning and the end temporarily inaccessible, @kbd{C-x =} displays +additional text describing the currently accessible range. For example, it +might display this: + +@smallexample +Char: C (67, #o103, #x43) point=252 of 889 (28%) <231-599> column=0 +@end smallexample + +@noindent +where the two extra numbers give the smallest and largest character +position that point is allowed to assume. The characters between those +two positions are the accessible ones. @xref{Narrowing}. + + If point is at the end of the buffer (or the end of the accessible +part), the @w{@kbd{C-x =}} output does not describe a character after +point. The output might look like this: + +@smallexample +point=36169 of 36168 (EOB) column=0 +@end smallexample + +@cindex character set of character at point +@cindex font of character at point +@cindex text properties at point +@cindex face at point + @w{@kbd{C-u C-x =}} displays the following additional information about a +character. + +@itemize @bullet +@item +The character set name, and the codes that identify the character +within that character set; @acronym{ASCII} characters are identified +as belonging to the @code{ascii} character set. + +@item +The character's syntax and categories. + +@item +The character's encodings, both internally in the buffer, and externally +if you were to save the file. + +@item +What keys to type to input the character in the current input method +(if it supports the character). + +@item +If you are running Emacs on a graphical display, the font name and +glyph code for the character. If you are running Emacs on a text-only +terminal, the code(s) sent to the terminal. + +@item +The character's text properties (@pxref{Text Properties,,, +elisp, the Emacs Lisp Reference Manual}), including any non-default +faces used to display the character, and any overlays containing it +(@pxref{Overlays,,, elisp, the same manual}). +@end itemize + + Here's an example showing the Latin-1 character A with grave accent, +in a buffer whose coding system is @code{iso-latin-1}, whose +terminal coding system is @code{iso-latin-1} (so the terminal actually +displays the character as @samp{@`A}), and which has font-lock-mode +(@pxref{Font Lock}) enabled: + +@smallexample + character: @`A (2240, #o4300, #x8c0, U+00C0) + charset: latin-iso8859-1 + (Right-Hand Part of Latin Alphabet 1@dots{} + code point: #x40 + syntax: w which means: word + category: l:Latin + to input: type "`A" with latin-1-prefix +buffer code: #x81 #xC0 + file code: #xC0 (encoded by coding system iso-latin-1) + display: terminal code #xC0 + +There are text properties here: + fontified t +@end smallexample + +@node Arguments +@section Numeric Arguments +@cindex numeric arguments +@cindex prefix arguments +@cindex arguments to commands + + In mathematics and computer usage, @dfn{argument} means +``data provided to a function or operation.'' You can give any Emacs +command a @dfn{numeric argument} (also called a @dfn{prefix argument}). +Some commands interpret the argument as a repetition count. For +example, @kbd{C-f} with an argument of ten moves forward ten characters +instead of one. With these commands, no argument is equivalent to an +argument of one. Negative arguments tell most such commands to move or +act in the opposite direction. + +@kindex M-1 +@kindex M-@t{-} +@findex digit-argument +@findex negative-argument + If your terminal keyboard has a @key{META} key (labeled @key{ALT} on +PC keyboards), the easiest way to specify a numeric argument is to +type digits and/or a minus sign while holding down the @key{META} key. +For example, + +@example +M-5 C-n +@end example + +@noindent +moves down five lines. The characters @kbd{Meta-1}, @kbd{Meta-2}, +and so on, as well as @kbd{Meta--}, do this because they are keys bound +to commands (@code{digit-argument} and @code{negative-argument}) that +are defined to set up an argument for the next command. +@kbd{Meta--} without digits normally means @minus{}1. Digits and +@kbd{-} modified with Control, or Control and Meta, also specify numeric +arguments. + +@kindex C-u +@findex universal-argument + You can also specify a numeric argument by typing @kbd{C-u} +(@code{universal-argument}) followed by the digits. The advantage of +@kbd{C-u} is that you can type the digits without modifier keys; thus, +@kbd{C-u} works on all terminals. For a negative argument, type a +minus sign after @kbd{C-u}. A minus sign without digits normally +means @minus{}1. + + @kbd{C-u} alone has the special meaning of +``four times'': it multiplies the argument for the next command by +four. @kbd{C-u C-u} multiplies it by sixteen. Thus, @kbd{C-u C-u +C-f} moves forward sixteen characters. This is a good way to move +forward ``fast,'' since it moves about 1/5 of a line in the usual size +screen. Other useful combinations are @kbd{C-u C-n}, @kbd{C-u C-u +C-n} (move down a good fraction of a screen), @kbd{C-u C-u C-o} (make +``a lot'' of blank lines), and @kbd{C-u C-k} (kill four lines). + + Some commands care whether there is an argument, but ignore its +value. For example, the command @kbd{M-q} (@code{fill-paragraph}) +fills text; with an argument, it justifies the text as well. +(@xref{Filling}, for more information on @kbd{M-q}.) Plain @kbd{C-u} +is a handy way of providing an argument for such commands. + + Some commands use the value of the argument as a repeat count, but do +something peculiar when there is no argument. For example, the command +@kbd{C-k} (@code{kill-line}) with argument @var{n} kills @var{n} lines, +including their terminating newlines. But @kbd{C-k} with no argument is +special: it kills the text up to the next newline, or, if point is right at +the end of the line, it kills the newline itself. Thus, two @kbd{C-k} +commands with no arguments can kill a nonblank line, just like @kbd{C-k} +with an argument of one. (@xref{Killing}, for more information on +@kbd{C-k}.) + + A few commands treat a plain @kbd{C-u} differently from an ordinary +argument. A few others may treat an argument of just a minus sign +differently from an argument of @minus{}1. These unusual cases are +described when they come up; they exist to make an individual command +more convenient, and they are documented in that command's +documentation string. + + You can use a numeric argument before a self-inserting character to +insert multiple copies of it. This is straightforward when the +character is not a digit; for example, @kbd{C-u 6 4 a} inserts 64 +copies of the character @samp{a}. But this does not work for +inserting digits; @kbd{C-u 6 4 1} specifies an argument of 641. You +can separate the argument from the digit to insert with another +@kbd{C-u}; for example, @kbd{C-u 6 4 C-u 1} does insert 64 copies of +the character @samp{1}. + + We use the term ``prefix argument'' as well as ``numeric argument,'' +to emphasize that you type these argument before the command, and to +distinguish them from minibuffer arguments that come after the +command. + +@node Repeating +@section Repeating a Command +@cindex repeating a command + + Many simple commands, such as those invoked with a single key or +with @kbd{M-x @var{command-name} @key{RET}}, can be repeated by +invoking them with a numeric argument that serves as a repeat count +(@pxref{Arguments}). However, if the command you want to repeat +prompts for input, or uses a numeric argument in another way, that +method won't work. + +@kindex C-x z +@findex repeat + The command @kbd{C-x z} (@code{repeat}) provides another way to repeat +an Emacs command many times. This command repeats the previous Emacs +command, whatever that was. Repeating a command uses the same arguments +that were used before; it does not read new arguments each time. + + To repeat the command more than once, type additional @kbd{z}'s: each +@kbd{z} repeats the command one more time. Repetition ends when you +type a character other than @kbd{z}, or press a mouse button. + + For example, suppose you type @kbd{C-u 2 0 C-d} to delete 20 +characters. You can repeat that command (including its argument) three +additional times, to delete a total of 80 characters, by typing @kbd{C-x +z z z}. The first @kbd{C-x z} repeats the command once, and each +subsequent @kbd{z} repeats it once again. + +@ignore + arch-tag: cda8952a-c439-41c1-aecf-4bc0d6482956 +@end ignore diff --git a/doc/emacs/buffers.texi b/doc/emacs/buffers.texi new file mode 100644 index 00000000000..b43d72b1067 --- /dev/null +++ b/doc/emacs/buffers.texi @@ -0,0 +1,665 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Buffers, Windows, Files, Top +@chapter Using Multiple Buffers + +@cindex buffers + The text you are editing in Emacs resides in an object called a +@dfn{buffer}. Each time you visit a file, a buffer is created to hold the +file's text. Each time you invoke Dired, a buffer is created to hold the +directory listing. If you send a message with @kbd{C-x m}, a buffer named +@samp{*mail*} is used to hold the text of the message. When you ask for a +command's documentation, that appears in a buffer called @samp{*Help*}. + +@cindex selected buffer +@cindex current buffer + At any time, one and only one buffer is @dfn{current}. It is also +called the @dfn{selected buffer}. Often we say that a command operates on +``the buffer'' as if there were only one; but really this means that the +command operates on the current buffer (most commands do). + + When Emacs has multiple windows, each window has its own chosen +buffer and displays it; at any time, only one of the windows is +selected, and its chosen buffer is the current buffer. Each window's +mode line normally displays the name of the window's chosen buffer +(@pxref{Windows}). + + Each buffer has a name, which can be of any length, and you can select +any buffer by giving its name. Most buffers are made by visiting files, +and their names are derived from the files' names. But you can also create +an empty buffer with any name you want. A newly started Emacs has a buffer +named @samp{*scratch*} which can be used for evaluating Lisp expressions in +Emacs. The distinction between upper and lower case matters in buffer +names. + + Each buffer records individually what file it is visiting, whether it is +modified, and what major mode and minor modes are in effect in it +(@pxref{Major Modes}). Any Emacs variable can be made @dfn{local to} a +particular buffer, meaning its value in that buffer can be different from +the value in other buffers. @xref{Locals}. + +@cindex buffer size, maximum + A buffer's size cannot be larger than some maximum, which is defined +by the largest buffer position representable by the @dfn{Emacs integer} +data type. This is because Emacs tracks buffer positions using that +data type. For 32-bit machines, the largest buffer size is 256 +megabytes. + +@menu +* Select Buffer:: Creating a new buffer or reselecting an old one. +* List Buffers:: Getting a list of buffers that exist. +* Misc Buffer:: Renaming; changing read-onlyness; copying text. +* Kill Buffer:: Killing buffers you no longer need. +* Several Buffers:: How to go through the list of all buffers + and operate variously on several of them. +* Indirect Buffers:: An indirect buffer shares the text of another buffer. +* Buffer Convenience:: Convenience and customization features for + buffer handling. +@end menu + +@node Select Buffer +@section Creating and Selecting Buffers +@cindex change buffers +@cindex switch buffers + +@table @kbd +@item C-x b @var{buffer} @key{RET} +Select or create a buffer named @var{buffer} (@code{switch-to-buffer}). +@item C-x 4 b @var{buffer} @key{RET} +Similar, but select @var{buffer} in another window +(@code{switch-to-buffer-other-window}). +@item C-x 5 b @var{buffer} @key{RET} +Similar, but select @var{buffer} in a separate frame +(@code{switch-to-buffer-other-frame}). +@item C-x @key{LEFT} +Select the previous buffer in the list of existing buffers. +@item C-x @key{RIGHT} +Select the next buffer in the list of existing buffers. +@item C-u M-g M-g +@itemx C-u M-g g +Read a number @var{n} and move to line @var{n} in the most recently +selected buffer other than the current buffer. +@end table + +@kindex C-x b +@findex switch-to-buffer + To select the buffer named @var{bufname}, type @kbd{C-x b @var{bufname} +@key{RET}}. This runs the command @code{switch-to-buffer} with argument +@var{bufname}. You can use completion to enter the buffer +name (@pxref{Completion}). An empty argument to @kbd{C-x b} +specifies the buffer that was current most recently among those not +now displayed in any window. + +@kindex C-x @key{LEFT} +@kindex C-x @key{RIGHT} +@findex next-buffer +@findex previous-buffer + For conveniently switching between a few buffers, use the commands +@kbd{C-x @key{LEFT}} and @kbd{C-x @key{RIGHT}}. @kbd{C-x @key{RIGHT}} +(@code{previous-buffer}) selects the previous buffer (following the order +of most recent selection in the current frame), while @kbd{C-x @key{LEFT}} +(@code{next-buffer}) moves through buffers in the reverse direction. + +@kindex C-x 4 b +@findex switch-to-buffer-other-window +@vindex even-window-heights + To select a buffer in a window other than the current one, type +@kbd{C-x 4 b @var{bufname} @key{RET}}. This runs the command +@code{switch-to-buffer-other-window} which displays the buffer +@var{bufname} in another window. By default, if displaying the buffer +causes two vertically adjacent windows to be displayed, the heights of +those windows are evened out; to countermand that and preserve the +window configuration, set the variable @code{even-window-heights} to +@code{nil}. + +@kindex C-x 5 b +@findex switch-to-buffer-other-frame + Similarly, @kbd{C-x 5 b @var{buffer} @key{RET}} runs the command +@code{switch-to-buffer-other-frame} which selects a buffer in another +frame. + +@vindex display-buffer-reuse-frames + You can control how certain buffers are handled by these commands by +customizing the variables @code{special-display-buffer-names}, +@code{special-display-regexps}, @code{same-window-buffer-names}, and +@code{same-window-regexps}. See @ref{Force Same Window}, and +@ref{Special Buffer Frames}, for more about these variables. In +addition, if the value of @code{display-buffer-reuse-frames} is +non-@code{nil}, and the buffer you want to switch to is already +displayed in some frame, Emacs will just raise that frame. + + Most buffers are created by visiting files, or by Emacs commands that +want to display some text, but you can also create a buffer explicitly +by typing @kbd{C-x b @var{bufname} @key{RET}}. This makes a new, empty +buffer that is not visiting any file, and selects it for editing. Such +buffers are used for making notes to yourself. If you try to save one, +you are asked for the file name to use. The new buffer's major mode is +determined by the value of @code{default-major-mode} (@pxref{Major +Modes}). + + Note that @kbd{C-x C-f}, and any other command for visiting a file, +can also be used to switch to an existing file-visiting buffer. +@xref{Visiting}. + + @kbd{C-u M-g M-g}, that is @code{goto-line} with a prefix argument +of just @kbd{C-u}, reads a number @var{n} using the minibuffer, +selects the most recently selected buffer other than the current +buffer in another window, and then moves point to the beginning of +line number @var{n} in that buffer. This is mainly useful in a buffer +that refers to line numbers in another buffer: if point is on or just +after a number, @code{goto-line} uses that number as the default for +@var{n}. Note that prefix arguments other than just @kbd{C-u} behave +differently. @kbd{C-u 4 M-g M-g} goes to line 4 in the @emph{current} +buffer, without reading a number from the minibuffer. (Remember that +@kbd{M-g M-g} without prefix argument reads a number @var{n} and then +moves to line number @var{n} in the current buffer.) + + Emacs uses buffer names that start with a space for internal purposes. +It treats these buffers specially in minor ways---for example, by +default they do not record undo information. It is best to avoid using +such buffer names yourself. + +@node List Buffers +@section Listing Existing Buffers + +@table @kbd +@item C-x C-b +List the existing buffers (@code{list-buffers}). +@end table + +@cindex listing current buffers +@kindex C-x C-b +@findex list-buffers + To display a list of existing buffers, type @kbd{C-x C-b}. Each +line in the list shows one buffer's name, major mode and visited file. +The buffers are listed in the order that they were current; the +buffers that were current most recently come first. + + @samp{*} in the first field of a line indicates the buffer is +``modified.'' If several buffers are modified, it may be time to save +some with @kbd{C-x s} (@pxref{Save Commands}). @samp{%} indicates a +read-only buffer. @samp{.} marks the current buffer. Here is an +example of a buffer list:@refill + +@smallexample +CRM Buffer Size Mode File +. * .emacs 3294 Emacs-Lisp ~/.emacs + % *Help* 101 Help + search.c 86055 C ~/cvs/emacs/src/search.c + % src 20959 Dired by name ~/cvs/emacs/src/ + * *mail* 42 Mail + % HELLO 1607 Fundamental ~/cvs/emacs/etc/HELLO + % NEWS 481184 Outline ~/cvs/emacs/etc/NEWS + *scratch* 191 Lisp Interaction + * *Messages* 1554 Fundamental +@end smallexample + +@noindent +Note that the buffer @samp{*Help*} was made by a help request; it is +not visiting any file. The buffer @code{src} was made by Dired on the +directory @file{~/cvs/emacs/src/}. You can list only buffers that are +visiting files by giving the command a prefix argument, as in +@kbd{C-u C-x C-b}. + + @code{list-buffers} omits buffers whose names begin with a space, +unless they visit files: such buffers are used internally by Emacs. + +@need 2000 +@node Misc Buffer +@section Miscellaneous Buffer Operations + +@table @kbd +@item C-x C-q +Toggle read-only status of buffer (@code{toggle-read-only}). +@item M-x rename-buffer @key{RET} @var{name} @key{RET} +Change the name of the current buffer. +@item M-x rename-uniquely +Rename the current buffer by adding @samp{<@var{number}>} to the end. +@item M-x view-buffer @key{RET} @var{buffer} @key{RET} +Scroll through buffer @var{buffer}. +@end table + +@kindex C-x C-q +@vindex buffer-read-only +@cindex read-only buffer + A buffer can be @dfn{read-only}, which means that commands to change +its contents are not allowed. The mode line indicates read-only +buffers with @samp{%%} or @samp{%*} near the left margin. Read-only +buffers are usually made by subsystems such as Dired and Rmail that +have special commands to operate on the text; also by visiting a file +whose access control says you cannot write it. + +@findex toggle-read-only + If you wish to make changes in a read-only buffer, use the command +@kbd{C-x C-q} (@code{toggle-read-only}). It makes a read-only buffer +writable, and makes a writable buffer read-only. This +works by setting the variable @code{buffer-read-only}, which has a local +value in each buffer and makes the buffer read-only if its value is +non-@code{nil}. If you have files under version control, you may find +it convenient to bind @kbd{C-x C-q} to @code{vc-toggle-read-only} +instead. Then, typing @kbd{C-x C-q} not only changes the read-only +flag, but it also checks the file in or out. @xref{Version +Control}. + +@findex rename-buffer + @kbd{M-x rename-buffer} changes the name of the current buffer. You +specify the new name as a minibuffer argument; there is no default. +If you specify a name that is in use for some other buffer, an error +happens and no renaming is done. + +@findex rename-uniquely + @kbd{M-x rename-uniquely} renames the current buffer to a similar +name with a numeric suffix added to make it both different and unique. +This command does not need an argument. It is useful for creating +multiple shell buffers: if you rename the @samp{*shell*} buffer, then +do @kbd{M-x shell} again, it makes a new shell buffer named +@samp{*shell*}; meanwhile, the old shell buffer continues to exist +under its new name. This method is also good for mail buffers, +compilation buffers, and most Emacs features that create special +buffers with particular names. (With some of these features, such as +@kbd{M-x compile}, @kbd{M-x grep} an @kbd{M-x info}, you need to +switch to some other buffer before using the command, in order for it +to make a different buffer.) + +@findex view-buffer + @kbd{M-x view-buffer} is much like @kbd{M-x view-file} (@pxref{Misc +File Ops}) except that it examines an already existing Emacs buffer. +View mode provides commands for scrolling through the buffer +conveniently but not for changing it. When you exit View mode with +@kbd{q}, that switches back to the buffer (and the position) which was +previously displayed in the window. Alternatively, if you exit View +mode with @kbd{e}, the buffer and the value of point that resulted from +your perusal remain in effect. + + The commands @kbd{M-x append-to-buffer} and @kbd{M-x insert-buffer} +can be used to copy text from one buffer to another. @xref{Accumulating +Text}. + +@node Kill Buffer +@section Killing Buffers + +@cindex killing buffers + If you continue an Emacs session for a while, you may accumulate a +large number of buffers. You may then find it convenient to @dfn{kill} +the buffers you no longer need. On most operating systems, killing a +buffer releases its space back to the operating system so that other +programs can use it. Here are some commands for killing buffers: + +@table @kbd +@item C-x k @var{bufname} @key{RET} +Kill buffer @var{bufname} (@code{kill-buffer}). +@item M-x kill-some-buffers +Offer to kill each buffer, one by one. +@end table + +@findex kill-buffer +@findex kill-some-buffers +@kindex C-x k + + @kbd{C-x k} (@code{kill-buffer}) kills one buffer, whose name you +specify in the minibuffer. The default, used if you type just +@key{RET} in the minibuffer, is to kill the current buffer. If you +kill the current buffer, another buffer becomes current: one that was +current in the recent past but is not displayed in any window now. If +you ask to kill a file-visiting buffer that is modified (has unsaved +editing), then you must confirm with @kbd{yes} before the buffer is +killed. + + The command @kbd{M-x kill-some-buffers} asks about each buffer, one by +one. An answer of @kbd{y} means to kill the buffer. Killing the current +buffer or a buffer containing unsaved changes selects a new buffer or asks +for confirmation just like @code{kill-buffer}. + + The buffer menu feature (@pxref{Several Buffers}) is also convenient +for killing various buffers. + +@vindex kill-buffer-hook + If you want to do something special every time a buffer is killed, you +can add hook functions to the hook @code{kill-buffer-hook} (@pxref{Hooks}). + +@findex clean-buffer-list + If you run one Emacs session for a period of days, as many people do, +it can fill up with buffers that you used several days ago. The command +@kbd{M-x clean-buffer-list} is a convenient way to purge them; it kills +all the unmodified buffers that you have not used for a long time. An +ordinary buffer is killed if it has not been displayed for three days; +however, you can specify certain buffers that should never be killed +automatically, and others that should be killed if they have been unused +for a mere hour. + +@cindex Midnight mode +@vindex midnight-mode +@vindex midnight-hook + You can also have this buffer purging done for you, every day at +midnight, by enabling Midnight mode. Midnight mode operates each day at +midnight; at that time, it runs @code{clean-buffer-list}, or whichever +functions you have placed in the normal hook @code{midnight-hook} +(@pxref{Hooks}). + + To enable Midnight mode, use the Customization buffer to set the +variable @code{midnight-mode} to @code{t}. @xref{Easy Customization}. + +@node Several Buffers +@section Operating on Several Buffers +@cindex buffer menu + + The @dfn{buffer-menu} facility is like a ``Dired for buffers''; it allows +you to request operations on various Emacs buffers by editing an Emacs +buffer containing a list of them. You can save buffers, kill them +(here called @dfn{deleting} them, for consistency with Dired), or display +them. + +@table @kbd +@item M-x buffer-menu +Begin editing a buffer listing all Emacs buffers. +@item M-x buffer-menu-other-window. +Similar, but do it in another window. +@end table + +@findex buffer-menu +@findex buffer-menu-other-window + The command @code{buffer-menu} writes a list of all Emacs +buffers@footnote{Buffers which don't visit files and whose names begin +with a space are omitted: these are used internally by Emacs.} into the +buffer @samp{*Buffer List*}, and selects that buffer in Buffer Menu +mode. + + The buffer is read-only, and can be +changed only through the special commands described in this section. +The usual Emacs cursor motion commands can be used in the @samp{*Buffer +List*} buffer. The following commands apply to the buffer described on +the current line. + +@table @kbd +@item d +Request to delete (kill) the buffer, then move down. The request +shows as a @samp{D} on the line, before the buffer name. Requested +deletions take place when you type the @kbd{x} command. +@item C-d +Like @kbd{d} but move up afterwards instead of down. +@item s +Request to save the buffer. The request shows as an @samp{S} on the +line. Requested saves take place when you type the @kbd{x} command. +You may request both saving and deletion for the same buffer. +@item x +Perform previously requested deletions and saves. +@item u +Remove any request made for the current line, and move down. +@item @key{DEL} +Move to previous line and remove any request made for that line. +@end table + + The @kbd{d}, @kbd{C-d}, @kbd{s} and @kbd{u} commands to add or remove +flags also move down (or up) one line. They accept a numeric argument +as a repeat count. + + These commands operate immediately on the buffer listed on the current +line: + +@table @kbd +@item ~ +Mark the buffer ``unmodified.'' The command @kbd{~} does this +immediately when you type it. +@item % +Toggle the buffer's read-only flag. The command @kbd{%} does +this immediately when you type it. +@item t +Visit the buffer as a tags table. @xref{Select Tags Table}. +@end table + + There are also commands to select another buffer or buffers: + +@table @kbd +@item q +Quit the buffer menu---immediately display the most recent formerly +visible buffer in its place. +@item @key{RET} +@itemx f +Immediately select this line's buffer in place of the @samp{*Buffer +List*} buffer. +@item o +Immediately select this line's buffer in another window as if by +@kbd{C-x 4 b}, leaving @samp{*Buffer List*} visible. +@item C-o +Immediately display this line's buffer in another window, but don't +select the window. +@item 1 +Immediately select this line's buffer in a full-screen window. +@item 2 +Immediately set up two windows, with this line's buffer selected in +one, and the previously current buffer (aside from the buffer +@samp{*Buffer List*}) displayed in the other. +@item b +Bury the buffer listed on this line. +@item m +Mark this line's buffer to be displayed in another window if you exit +with the @kbd{v} command. The request shows as a @samp{>} at the +beginning of the line. (A single buffer may not have both a delete +request and a display request.) +@item v +Immediately select this line's buffer, and also display in other windows +any buffers previously marked with the @kbd{m} command. If you have not +marked any buffers, this command is equivalent to @kbd{1}. +@end table + + There is also a command that affects the entire buffer list: + +@table @kbd +@item T +Delete, or reinsert, lines for non-file buffers. This command toggles +the inclusion of such buffers in the buffer list. +@end table + + What @code{buffer-menu} actually does is create and switch to a +suitable buffer, and turn on Buffer Menu mode in it. Everything else +described above is implemented by the special commands provided in +Buffer Menu mode. One consequence of this is that you can switch from +the @samp{*Buffer List*} buffer to another Emacs buffer, and edit +there. You can reselect the @samp{*Buffer List*} buffer later, to +perform the operations already requested, or you can kill it, or pay +no further attention to it. + + The list in the @samp{*Buffer List*} buffer looks exactly like the +buffer list described in @ref{List Buffers}, because they really are +the same. The only difference between @code{buffer-menu} and +@code{list-buffers} is that @code{buffer-menu} switches to the +@samp{*Buffer List*} buffer in the selected window; +@code{list-buffers} displays the same buffer in another window. If +you run @code{list-buffers} (that is, type @kbd{C-x C-b}) and select +the buffer list manually, you can use all of the commands described +here. + + Normally, the buffer @samp{*Buffer List*} is not updated +automatically when buffers are created and killed; its contents are +just text. If you have created, deleted or renamed buffers, the way +to update @samp{*Buffer List*} to show what you have done is to type +@kbd{g} (@code{revert-buffer}). You can make this happen regularly +every @code{auto-revert-interval} seconds if you enable Auto Revert +mode in this buffer, as long as it is not marked modified. Global +Auto Revert mode applies to the @samp{*Buffer List*} buffer only if +@code{global-auto-revert-non-file-buffers} is non-@code{nil}. +@iftex +@inforef{Autorevert,, emacs-xtra}, for details. +@end iftex +@ifnottex +@xref{Autorevert, global-auto-revert-non-file-buffers}, for details. +@end ifnottex + + + The command @code{buffer-menu-other-window} works the same as +@code{buffer-menu}, except that it displays the buffers list in +another window. + +@node Indirect Buffers +@section Indirect Buffers +@cindex indirect buffer +@cindex base buffer + + An @dfn{indirect buffer} shares the text of some other buffer, which +is called the @dfn{base buffer} of the indirect buffer. In some ways it +is the analogue, for buffers, of a symbolic link between files. + +@table @kbd +@findex make-indirect-buffer +@item M-x make-indirect-buffer @key{RET} @var{base-buffer} @key{RET} @var{indirect-name} @key{RET} +Create an indirect buffer named @var{indirect-name} whose base buffer +is @var{base-buffer}. +@findex clone-indirect-buffer +@item M-x clone-indirect-buffer @key{RET} +Create an indirect buffer that is a twin copy of the current buffer. +@item C-x 4 c +@kindex C-x 4 c +@findex clone-indirect-buffer-other-window +Create an indirect buffer that is a twin copy of the current buffer, and +select it in another window (@code{clone-indirect-buffer-other-window}). +@end table + + The text of the indirect buffer is always identical to the text of its +base buffer; changes made by editing either one are visible immediately +in the other. But in all other respects, the indirect buffer and its +base buffer are completely separate. They have different names, +different values of point, different narrowing, different markers, +different major modes, and different local variables. + + An indirect buffer cannot visit a file, but its base buffer can. If +you try to save the indirect buffer, that actually works by saving the +base buffer. Killing the base buffer effectively kills the indirect +buffer, but killing an indirect buffer has no effect on its base buffer. + + One way to use indirect buffers is to display multiple views of an +outline. @xref{Outline Views}. + + A quick and handy way to make an indirect buffer is with the command +@kbd{M-x clone-indirect-buffer}. It creates and selects an indirect +buffer whose base buffer is the current buffer. With a numeric +argument, it prompts for the name of the indirect buffer; otherwise it +uses the name of the current buffer, with a @samp{<@var{n}>} suffix +added. @kbd{C-x 4 c} (@code{clone-indirect-buffer-other-window}) +works like @kbd{M-x clone-indirect-buffer}, but it selects the new +buffer in another window. + + The more general way to make an indirect buffer is with the command +@kbd{M-x make-indirect-buffer}. It creates an indirect buffer from +buffer @var{base-buffer}, under the name @var{indirect-name}. It +prompts for both @var{base-buffer} and @var{indirect-name} using the +minibuffer. + +@node Buffer Convenience +@section Convenience Features and Customization of Buffer Handling + + This section describes several modes and features that make it more +convenient to switch between buffers. + +@menu +* Uniquify:: Making buffer names unique with directory parts. +* Iswitchb:: Switching between buffers with substrings. +* Buffer Menus:: Configurable buffer menu. +@end menu + +@node Uniquify +@subsection Making Buffer Names Unique + +@cindex unique buffer names +@cindex directories in buffer names + When several buffers visit identically-named files, Emacs must give +the buffers distinct names. The usual method for making buffer names +unique adds @samp{<2>}, @samp{<3>}, etc. to the end of the buffer +names (all but one of them). + +@vindex uniquify-buffer-name-style + Other methods work by adding parts of each file's directory to the +buffer name. To select one, customize the variable +@code{uniquify-buffer-name-style} (@pxref{Easy Customization}). + + To begin with, the @code{forward} naming method includes part of the +file's directory name at the beginning of the buffer name; using this +method, buffers visiting the files @file{/u/rms/tmp/Makefile} and +@file{/usr/projects/zaphod/Makefile} would be named +@samp{tmp/Makefile} and @samp{zaphod/Makefile}, respectively (instead +of @samp{Makefile} and @samp{Makefile<2>}). + + In contrast, the @code{post-forward} naming method would call the +buffers @samp{Makefile|tmp} and @samp{Makefile|zaphod}, and the +@code{reverse} naming method would call them @samp{Makefile\tmp} and +@samp{Makefile\zaphod}. The nontrivial difference between +@code{post-forward} and @code{reverse} occurs when just one directory +name is not enough to distinguish two files; then @code{reverse} puts +the directory names in reverse order, so that @file{/top/middle/file} +becomes @samp{file\middle\top}, while @code{post-forward} puts them in +forward order after the file name, as in @samp{file|top/middle}. + + Which rule to follow for putting the directory names in the buffer +name is not very important if you are going to @emph{look} at the +buffer names before you type one. But as an experienced user, if you +know the rule, you won't have to look. And then you may find that one +rule or another is easier for you to remember and apply quickly. + +@node Iswitchb +@subsection Switching Between Buffers using Substrings + +@findex iswitchb-mode +@cindex Iswitchb mode +@cindex mode, Iswitchb +@kindex C-x b @r{(Iswitchb mode)} +@kindex C-x 4 b @r{(Iswitchb mode)} +@kindex C-x 5 b @r{(Iswitchb mode)} +@kindex C-x 4 C-o @r{(Iswitchb mode)} + + Iswitchb global minor mode provides convenient switching between +buffers using substrings of their names. It replaces the normal +definitions of @kbd{C-x b}, @kbd{C-x 4 b}, @kbd{C-x 5 b}, and @kbd{C-x +4 C-o} with alternative commands that are somewhat ``smarter.'' + + When one of these commands prompts you for a buffer name, you can +type in just a substring of the name you want to choose. As you enter +the substring, Iswitchb mode continuously displays a list of buffers +that match the substring you have typed. + + At any time, you can type @key{RET} to select the first buffer in +the list. So the way to select a particular buffer is to make it the +first in the list. There are two ways to do this. You can type more +of the buffer name and thus narrow down the list, excluding unwanted +buffers above the desired one. Alternatively, you can use @kbd{C-s} +and @kbd{C-r} to rotate the list until the desired buffer is first. + + @key{TAB} while entering the buffer name performs completion on the +string you have entered, based on the displayed list of buffers. + + To enable Iswitchb mode, type @kbd{M-x iswitchb-mode}, or customize +the variable @code{iswitchb-mode} to @code{t} (@pxref{Easy +Customization}). + +@node Buffer Menus +@subsection Customizing Buffer Menus + +@findex bs-show +@cindex buffer list, customizable +@table @kbd +@item M-x bs-show +Make a list of buffers similarly to @kbd{M-x list-buffers} but +customizable. +@end table + + @kbd{M-x bs-show} pops up a buffer list similar to the one normally +displayed by @kbd{C-x C-b} but which you can customize. If you prefer +this to the usual buffer list, you can bind this command to @kbd{C-x +C-b}. To customize this buffer list, use the @code{bs} Custom group +(@pxref{Easy Customization}). + +@findex msb-mode +@cindex mode, MSB +@cindex MSB mode +@cindex buffer menu +@findex mouse-buffer-menu +@kindex C-Down-Mouse-1 + MSB global minor mode (``MSB'' stands for ``mouse select buffer'') +provides a different and customizable mouse buffer menu which you may +prefer. It replaces the bindings of @code{mouse-buffer-menu}, +normally on @kbd{C-Down-Mouse-1}, and the menu bar buffer menu. You +can customize the menu in the @code{msb} Custom group. + +@ignore + arch-tag: 08c43460-f4f4-4b43-9cb5-1ea9ad991695 +@end ignore diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi new file mode 100644 index 00000000000..62e5f7b4316 --- /dev/null +++ b/doc/emacs/building.texi @@ -0,0 +1,1440 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Building, Maintaining, Programs, Top +@chapter Compiling and Testing Programs +@cindex building programs +@cindex program building +@cindex running Lisp functions + + The previous chapter discusses the Emacs commands that are useful for +making changes in programs. This chapter deals with commands that assist +in the larger process of compiling and testing programs. + +@menu +* Compilation:: Compiling programs in languages other + than Lisp (C, Pascal, etc.). +* Compilation Mode:: The mode for visiting compiler errors. +* Compilation Shell:: Customizing your shell properly + for use in the compilation buffer. +* Grep Searching:: Searching with grep. +* Flymake:: Finding syntax errors on the fly. +* Debuggers:: Running symbolic debuggers for non-Lisp programs. +* Executing Lisp:: Various modes for editing Lisp programs, + with different facilities for running + the Lisp programs. +* Libraries: Lisp Libraries. Creating Lisp programs to run in Emacs. +* Eval: Lisp Eval. Executing a single Lisp expression in Emacs. +* Interaction: Lisp Interaction. Executing Lisp in an Emacs buffer. +* External Lisp:: Communicating through Emacs with a separate Lisp. +@end menu + +@node Compilation +@section Running Compilations under Emacs +@cindex inferior process +@cindex make +@cindex compilation errors +@cindex error log + + Emacs can run compilers for noninteractive languages such as C and +Fortran as inferior processes, feeding the error log into an Emacs buffer. +It can also parse the error messages and show you the source lines where +compilation errors occurred. + +@table @kbd +@item M-x compile +Run a compiler asynchronously under Emacs, with error messages going to +the @samp{*compilation*} buffer. +@item M-x recompile +Invoke a compiler with the same command as in the last invocation of +@kbd{M-x compile}. +@item M-x kill-compilation +Kill the running compilation subprocess. +@end table + +@findex compile + To run @code{make} or another compilation command, do @kbd{M-x +compile}. This command reads a shell command line using the minibuffer, +and then executes the command in an inferior shell, putting output in +the buffer named @samp{*compilation*}. The current buffer's default +directory is used as the working directory for the execution of the +command; normally, therefore, the compilation happens in this +directory. + +@vindex compile-command + The default for the compilation command is normally @samp{make -k}, +which is correct most of the time for nontrivial programs. +(@xref{Top,, Make, make, GNU Make Manual}.) If you have done @kbd{M-x +compile} before, the default each time is the command you used the +previous time. @code{compile} stores this command in the variable +@code{compile-command}, so setting that variable specifies the default +for the next use of @kbd{M-x compile}. If a file specifies a file +local value for @code{compile-command}, that provides the default when +you type @kbd{M-x compile} in that file's buffer. @xref{File +Variables}. + + Starting a compilation displays the buffer @samp{*compilation*} in +another window but does not select it. The buffer's mode line tells +you whether compilation is finished, with the word @samp{run}, +@samp{signal} or @samp{exit} inside the parentheses. You do not have +to keep this buffer visible; compilation continues in any case. While +a compilation is going on, the string @samp{Compiling} appears in the +mode lines of all windows. When this string disappears, the +compilation is finished. + + If you want to watch the compilation transcript as it appears, switch +to the @samp{*compilation*} buffer and move point to the end of the +buffer. When point is at the end, new compilation output is inserted +above point, which remains at the end. If point is not at the end of +the buffer, it remains fixed while more compilation output is added at +the end of the buffer. + +@cindex compilation buffer, keeping point at end +@vindex compilation-scroll-output + If you set the variable @code{compilation-scroll-output} to a +non-@code{nil} value, then the compilation buffer always scrolls to +follow output as it comes in. + +@findex recompile + To rerun the last compilation with the same command, type @kbd{M-x +recompile}. This automatically reuses the compilation command from +the last invocation of @kbd{M-x compile}. It also reuses the +@samp{*compilation*} buffer and starts the compilation in its default +directory, which is the directory in which the previous compilation +was started. + + When the compiler process terminates, for whatever reason, the mode +line of the @samp{*compilation*} buffer changes to say @samp{exit} +(followed by the exit code, @samp{[0]} for a normal exit), or +@samp{signal} (if a signal terminated the process), instead of +@samp{run}. + +@findex kill-compilation + Starting a new compilation also kills any compilation already +running in @samp{*compilation*}, as the buffer can only handle one +compilation at any time. However, @kbd{M-x compile} asks for +confirmation before actually killing a compilation that is running. +You can also kill the compilation process with @kbd{M-x +kill-compilation}. + + If you want to run two compilations at once, you should start the +first one, then rename the @samp{*compilation*} buffer (perhaps using +@code{rename-uniquely}; @pxref{Misc Buffer}), and start the other +compilation. That will create a new @samp{*compilation*} buffer. + + Emacs does not expect a compiler process to launch asynchronous +subprocesses; if it does, and they keep running after the main +compiler process has terminated, Emacs may kill them or their output +may not arrive in Emacs. To avoid this problem, make the main process +wait for its subprocesses to finish. In a shell script, you can do this +using @samp{$!} and @samp{wait}, like this: + +@example +(sleep 10; echo 2nd)& pid=$! # @r{Record pid of subprocess} +echo first message +wait $pid # @r{Wait for subprocess} +@end example + + If the background process does not output to the compilation buffer, +so you only need to prevent it from being killed when the main +compilation process terminates, this is sufficient: + +@example +nohup @var{command}; sleep 1 +@end example + +@vindex compilation-environment + You can control the environment passed to the compilation command +with the variable @code{compilation-environment}. Its value is a list +of environment variable settings; each element should be a string of +the form @code{"@var{envvarname}=@var{value}"}. These environment +variable settings override the usual ones. + +@node Compilation Mode +@section Compilation Mode + +@cindex Compilation mode +@cindex mode, Compilation + The @samp{*compilation*} buffer uses a special major mode, +Compilation mode, whose main feature is to provide a convenient way to +visit the source line corresponding to an error message. These +commands are also available in other special buffers that list +locations in files, including those made by @kbd{M-x grep} and +@kbd{M-x occur}. + +@table @kbd +@item M-g M-n +@itemx M-g n +@itemx C-x ` +Visit the locus of the next error message or match. +@item M-g M-p +@itemx M-g p +Visit the locus of the previous error message or match. +@item @key{RET} +Visit the locus of the error message that point is on. +This command is used in the compilation buffer. +@item Mouse-2 +Visit the locus of the error message that you click on. +@item M-n +Find and highlight the locus of the next error message, without +selecting the source buffer. +@item M-p +Find and highlight the locus of the previous error message, without +selecting the source buffer. +@item M-@} +Move point to the next error for a different file than the current +one. +@item M-@{ +Move point to the previous error for a different file than the current +one. +@item C-c C-f +Toggle Next Error Follow minor mode, which makes cursor motion in the +compilation buffer produce automatic source display. +@end table + +@findex compile-goto-error + You can visit the source for any particular error message by moving +point in the @samp{*compilation*} buffer to that error message and +typing @key{RET} (@code{compile-goto-error}). Alternatively, you can +click @kbd{Mouse-2} on the error message; you need not switch to the +@samp{*compilation*} buffer first. + +@kindex M-g M-n +@kindex M-g n +@kindex C-x ` +@findex next-error +@vindex next-error-highlight + To parse the compiler error messages sequentially, type @kbd{C-x `} +(@code{next-error}). The character following the @kbd{C-x} is the +backquote or ``grave accent,'' not the single-quote. This command is +available in all buffers, not just in @samp{*compilation*}; it +displays the next error message at the top of one window and source +location of the error in another window. It also temporarily +highlights the relevant source line, for a period controlled by the +variable @code{next-error-highlight}. + + The first time @w{@kbd{C-x `}} is used after the start of a compilation, +it moves to the first error's location. Subsequent uses of @kbd{C-x +`} advance down to subsequent errors. If you visit a specific error +message with @key{RET} or @kbd{Mouse-2}, subsequent @w{@kbd{C-x `}} +commands advance from there. When @w{@kbd{C-x `}} gets to the end of the +buffer and finds no more error messages to visit, it fails and signals +an Emacs error. @w{@kbd{C-u C-x `}} starts scanning from the beginning of +the compilation buffer, and goes to the first error's location. + +@vindex compilation-skip-threshold + By default, @w{@kbd{C-x `}} skips less important messages. The variable +@code{compilation-skip-threshold} controls this. If its value is 2, +@w{@kbd{C-x `}} skips anything less than error, 1 skips anything less +than warning, and 0 doesn't skip any messages. The default is 1. + + When the window has a left fringe, an arrow in the fringe points to +the current message in the compilation buffer. The variable +@code{compilation-context-lines} controls the number of lines of +leading context to display before the current message. Going to an +error message location scrolls the @samp{*compilation*} buffer to put +the message that far down from the top. The value @code{nil} is +special: if there's a left fringe, the window doesn't scroll at all +if the message is already visible. If there is no left fringe, +@code{nil} means display the message at the top of the window. + + If you're not in the compilation buffer when you run +@code{next-error}, Emacs will look for a buffer that contains error +messages. First, it looks for one displayed in the selected frame, +then for one that previously had @code{next-error} called on it, and +then at the current buffer. Finally, Emacs looks at all the remaining +buffers. @code{next-error} signals an error if it can't find any such +buffer. + +@vindex compilation-error-regexp-alist +@vindex grep-regexp-alist + To parse messages from the compiler, Compilation mode uses the +variable @code{compilation-error-regexp-alist} which lists various +formats of error messages and tells Emacs how to extract the source file +and the line number from the text of a message. If your compiler isn't +supported, you can tailor Compilation mode to it by adding elements to +that list. A similar variable @code{grep-regexp-alist} tells Emacs how +to parse output of a @code{grep} command. + +@findex compilation-next-error +@findex compilation-previous-error +@findex compilation-next-file +@findex compilation-previous-file + Compilation mode also redefines the keys @key{SPC} and @key{DEL} to +scroll by screenfuls, and @kbd{M-n} (@code{compilation-next-error}) +and @kbd{M-p} (@code{compilation-previous-error}) to move to the next +or previous error message. You can also use @kbd{M-@{} +(@code{compilation-next-file} and @kbd{M-@}} +(@code{compilation-previous-file}) to move up or down to an error +message for a different source file. + +@cindex Next Error Follow mode +@findex next-error-follow-minor-mode + You can type @kbd{C-c C-f} to toggle Next Error Follow mode. In +this minor mode, ordinary cursor motion in the compilation buffer +automatically updates the source buffer. For instance, moving the +cursor to the next error message causes the location of that error to +be displayed immediately. + + The features of Compilation mode are also available in a minor mode +called Compilation Minor mode. This lets you parse error messages in +any buffer, not just a normal compilation output buffer. Type @kbd{M-x +compilation-minor-mode} to enable the minor mode. This defines the keys +@key{RET} and @kbd{Mouse-2}, as in the Compilation major mode. + + Compilation minor mode works in any buffer, as long as the contents +are in a format that it understands. In an Rlogin buffer (@pxref{Remote +Host}), Compilation minor mode automatically accesses remote source +files by FTP (@pxref{File Names}). + +@node Compilation Shell +@section Subshells for Compilation + + Emacs uses a shell to run the compilation command, but specifies the +option for a noninteractive shell. This means, in particular, that +the shell should start with no prompt. If you find your usual shell +prompt making an unsightly appearance in the @samp{*compilation*} +buffer, it means you have made a mistake in your shell's init file by +setting the prompt unconditionally. (This init file's name may be +@file{.bashrc}, @file{.profile}, @file{.cshrc}, @file{.shrc}, or +various other things, depending on the shell you use.) The shell init +file should set the prompt only if there already is a prompt. Here's +how to do it in bash: + +@example +if [ "$@{PS1+set@}" = set ] +then PS1=@dots{} +fi +@end example + +@noindent +And here's how to do it in csh: + +@example +if ($?prompt) set prompt = @dots{} +@end example + + There may well be other things that your shell's init file +ought to do only for an interactive shell. You can use the same +method to conditionalize them. + + The MS-DOS ``operating system'' does not support asynchronous +subprocesses; to work around this lack, @kbd{M-x compile} runs the +compilation command synchronously on MS-DOS. As a consequence, you must +wait until the command finishes before you can do anything else in +Emacs. +@iftex +@inforef{MS-DOS,,emacs-xtra}. +@end iftex +@ifnottex +@xref{MS-DOS}. +@end ifnottex + +@node Grep Searching +@section Searching with Grep under Emacs + + Just as you can run a compiler from Emacs and then visit the lines +with compilation errors, you can also run @code{grep} and then visit +the lines on which matches were found. This works by treating the +matches reported by @code{grep} as if they were ``errors.'' The +buffer of matches uses Grep mode, which is a variant of Compilation +mode (@pxref{Compilation Mode}). + +@table @kbd +@item M-x grep +@item M-x lgrep +Run @code{grep} asynchronously under Emacs, with matching lines +listed in the buffer named @samp{*grep*}. +@item M-x grep-find +@itemx M-x find-grep +@itemx M-x rgrep +Run @code{grep} via @code{find}, with user-specified arguments, and +collect output in the buffer named @samp{*grep*}. +@item M-x kill-grep +Kill the running @code{grep} subprocess. +@end table + +@findex grep + To run @code{grep}, type @kbd{M-x grep}, then enter a command line +that specifies how to run @code{grep}. Use the same arguments you +would give @code{grep} when running it normally: a @code{grep}-style +regexp (usually in single-quotes to quote the shell's special +characters) followed by file names, which may use wildcards. If you +specify a prefix argument for @kbd{M-x grep}, it finds the tag +(@pxref{Tags}) in the buffer around point, and puts that into the +default @code{grep} command. + + Your command need not simply run @code{grep}; you can use any shell +command that produces output in the same format. For instance, you +can chain @code{grep} commands, like this: + +@example +grep -nH -e foo *.el | grep bar | grep toto +@end example + + The output from @code{grep} goes in the @samp{*grep*} buffer. You +can find the corresponding lines in the original files using @w{@kbd{C-x +`}}, @key{RET}, and so forth, just like compilation errors. + + Some grep programs accept a @samp{--color} option to output special +markers around matches for the purpose of highlighting. You can make +use of this feature by setting @code{grep-highlight-matches} to +@code{t}. When displaying a match in the source buffer, the exact +match will be highlighted, instead of the entire source line. + +@findex grep-find +@findex find-grep + The command @kbd{M-x grep-find} (also available as @kbd{M-x +find-grep}) is similar to @kbd{M-x grep}, but it supplies a different +initial default for the command---one that runs both @code{find} and +@code{grep}, so as to search every file in a directory tree. See also +the @code{find-grep-dired} command, in @ref{Dired and Find}. + +@findex lgrep +@findex rgrep + The commands @kbd{M-x lgrep} (local grep) and @kbd{M-x rgrep} +(recursive grep) are more user-friendly versions of @code{grep} and +@code{grep-find}, which prompt separately for the regular expression +to match, the files to search, and the base directory for the search. +Case sensitivity of the search is controlled by the +current value of @code{case-fold-search}. + +These commands build the shell commands based on the variables +@code{grep-template} (for @code{lgrep}) and @code{grep-find-template} +(for @code{rgrep}). + +The files to search can use aliases defined in the variable +@code{grep-files-aliases}. + +Subdirectories listed in the variable +@code{grep-find-ignored-directories} such as those typically used by +various version control systems, like CVS and arch, are automatically +skipped by @code{rgrep}. + +@node Flymake +@section Finding Syntax Errors On The Fly +@cindex checking syntax + + Flymake mode is a minor mode that performs on-the-fly syntax +checking for many programming and markup languages, including C, C++, +Perl, HTML, and @TeX{}/La@TeX{}. It is somewhat analogous to Flyspell +mode, which performs spell checking for ordinary human languages in a +similar fashion (@pxref{Spelling}). As you edit a file, Flymake mode +runs an appropriate syntax checking tool in the background, using a +temporary copy of the buffer. It then parses the error and warning +messages, and highlights the erroneous lines in the buffer. The +syntax checking tool used depends on the language; for example, for +C/C++ files this is usually the C compiler. Flymake can also use +build tools such as @code{make} for checking complicated projects. + + To activate Flymake mode, type @kbd{M-x flymake-mode}. You can move +to the errors spotted by Flymake mode with @kbd{M-x +flymake-goto-next-error} and @kbd{M-x flymake-goto-prev-error}. To +display any error messages associated with the current line, use +@kbd{M-x flymake-display-err-menu-for-current-line}. + + For more details about using Flymake, see @ref{Top, Flymake, +Flymake, flymake, The Flymake Manual}. + +@node Debuggers +@section Running Debuggers Under Emacs +@cindex debuggers +@cindex GUD library +@cindex GDB +@cindex DBX +@cindex SDB +@cindex XDB +@cindex Perldb +@cindex JDB +@cindex PDB + +@c Do you believe in GUD? +The GUD (Grand Unified Debugger) library provides an interface to +various symbolic debuggers from within Emacs. We recommend the +debugger GDB, which is free software, but GUD can also run DBX, SDB or +XDB. GUD can also serve as an interface to Perl's debugging mode, the +Python debugger PDB, and to JDB, the Java Debugger. +@xref{Debugging,, The Lisp Debugger, elisp, the Emacs Lisp Reference +Manual}, for information on debugging Emacs Lisp programs. + +@menu +* Starting GUD:: How to start a debugger subprocess. +* Debugger Operation:: Connection between the debugger and source buffers. +* Commands of GUD:: Key bindings for common commands. +* GUD Customization:: Defining your own commands for GUD. +* GDB Graphical Interface:: An enhanced mode that uses GDB features to + implement a graphical debugging environment through + Emacs. +@end menu + +@node Starting GUD +@subsection Starting GUD + + There are several commands for starting a debugger, each corresponding +to a particular debugger program. + +@table @kbd +@item M-x gdb @key{RET} @var{file} @key{RET} +@findex gdb +Run GDB as a subprocess of Emacs. By default, this uses an IDE-like +graphical interface; see @ref{GDB Graphical Interface}. Only GDB +works with the graphical interface. + +@item M-x dbx @key{RET} @var{file} @key{RET} +@findex dbx +Run DBX as a subprocess of Emacs. Since Emacs does not implement a +graphical interface for DBX, communication with DBX works by typing +commands in the GUD interaction buffer. The same is true for all +the other supported debuggers. + +@item M-x xdb @key{RET} @var{file} @key{RET} +@findex xdb +@vindex gud-xdb-directories +Similar, but run XDB. Use the variable +@code{gud-xdb-directories} to specify directories to search for source +files. + +@item M-x sdb @key{RET} @var{file} @key{RET} +@findex sdb +Similar, but run SDB. + + Some versions of SDB do not mention source file names in their +messages. When you use them, you need to have a valid tags table +(@pxref{Tags}) in order for GUD to find functions in the source code. +If you have not visited a tags table or the tags table doesn't list one +of the functions, you get a message saying @samp{The sdb support +requires a valid tags table to work}. If this happens, generate a valid +tags table in the working directory and try again. + +@item M-x perldb @key{RET} @var{file} @key{RET} +@findex perldb +Run the Perl interpreter in debug mode to debug @var{file}, a Perl program. + +@item M-x jdb @key{RET} @var{file} @key{RET} +@findex jdb +Run the Java debugger to debug @var{file}. + +@item M-x pdb @key{RET} @var{file} @key{RET} +@findex pdb +Run the Python debugger to debug @var{file}. +@end table + + Each of these commands takes one argument: a command line to invoke +the debugger. In the simplest case, specify just the name of the +executable file you want to debug. You may also use options that the +debugger supports. However, shell wildcards and variables are not +allowed. GUD assumes that the first argument not starting with a +@samp{-} is the executable file name. + +Tramp provides a facility to debug programs on remote hosts. +@xref{Running a debugger on a remote host, Running a debugger on a remote host,, tramp, The Tramp Manual}. +@c Running a debugger on a remote host + +@node Debugger Operation +@subsection Debugger Operation + +@cindex fringes, and current execution line in GUD + Generally when you run a debugger with GUD, the debugger uses an Emacs +buffer for its ordinary input and output. This is called the GUD +buffer. Input and output from the program you are debugging also use +this buffer. We call this @dfn{text command mode}. The GDB Graphical +Interface can use further buffers (@pxref{GDB Graphical Interface}). + + The debugger displays the source files of the program by visiting +them in Emacs buffers. An arrow in the left fringe indicates the +current execution line.@footnote{On a text-only terminal, the arrow +appears as @samp{=>} and overlays the first two text columns.} Moving +point in this buffer does not move the arrow. The arrow is not part +of the file's text; it appears only on the screen. + + You can start editing these source files at any time in the buffers +that display them. If you do modify a source file, keep in mind that +inserting or deleting lines will throw off the arrow's positioning; +GUD has no way of figuring out which line corresponded before your +changes to the line number in a debugger message. Also, you'll +typically have to recompile and restart the program for your changes +to be reflected in the debugger's tables. + +@cindex tooltips with GUD +@vindex tooltip-gud-modes +@vindex gud-tooltip-mode +@vindex gud-tooltip-echo-area + The Tooltip facility (@pxref{Tooltips}) provides support for GUD@. +You activate this feature by turning on the minor mode +@code{gud-tooltip-mode}. Then you can display a variable's value in a +tooltip simply by pointing at it with the mouse. This operates in the +GUD buffer and in source buffers with major modes in the list +@code{gud-tooltip-modes}. If the variable @code{gud-tooltip-echo-area} +is non-@code{nil} then the variable's value is displayed in the echo +area. When debugging a C program using the GDB Graphical Interface, you +can also display macro definitions associated with an identifier when +the program is not executing. + + GUD tooltips are disabled when you use GDB in text command mode +(@pxref{GDB Graphical Interface}), because displaying an expression's +value in GDB can sometimes expand a macro and result in a side effect +that interferes with the program's operation. The GDB graphical +interface supports GUD tooltips and assures they will not cause side +effects. + +@node Commands of GUD +@subsection Commands of GUD + + The GUD interaction buffer uses a variant of Shell mode, so the +Emacs commands of Shell mode are available (@pxref{Shell Mode}). All +the usual commands for your debugger are available, and you can use +the Shell mode history commands to repeat them. If you wish, you can +control your debugger process entirely through this buffer. + + GUD mode also provides commands for setting and clearing +breakpoints, for selecting stack frames, and for stepping through the +program. These commands are available both in the GUD buffer and +globally, but with different key bindings. It also has its own tool +bar from which you can invoke the more common commands by clicking on +the appropriate icon. This is particularly useful for repetitive +commands like @code{gud-next} and @code{gud-step}, and allows you to +keep the GUD buffer hidden. + + The breakpoint commands are normally used in source file buffers, +because that is the easiest way to specify where to set or clear the +breakpoint. Here's the global command to set a breakpoint: + +@table @kbd +@item C-x @key{SPC} +@kindex C-x SPC +Set a breakpoint on the source line that point is on. +@end table + +@kindex C-x C-a @r{(GUD)} + Here are the other special commands provided by GUD@. The keys +starting with @kbd{C-c} are available only in the GUD interaction +buffer. The key bindings that start with @kbd{C-x C-a} are available +in the GUD interaction buffer and also in source files. Some of these +commands are not available to all the supported debuggers. + +@table @kbd +@item C-c C-l +@kindex C-c C-l @r{(GUD)} +@itemx C-x C-a C-l +@findex gud-refresh +Display in another window the last line referred to in the GUD +buffer (that is, the line indicated in the last location message). +This runs the command @code{gud-refresh}. + +@item C-c C-s +@kindex C-c C-s @r{(GUD)} +@itemx C-x C-a C-s +@findex gud-step +Execute a single line of code (@code{gud-step}). If the line contains +a function call, execution stops after entering the called function. + +@item C-c C-n +@kindex C-c C-n @r{(GUD)} +@itemx C-x C-a C-n +@findex gud-next +Execute a single line of code, stepping across entire function calls +at full speed (@code{gud-next}). + +@item C-c C-i +@kindex C-c C-i @r{(GUD)} +@itemx C-x C-a C-i +@findex gud-stepi +Execute a single machine instruction (@code{gud-stepi}). + +@item C-c C-p +@kindex C-c C-p @r{(GUD)} +@itemx C-x C-a C-p +@findex gud-print +Evaluate the expression at point (@code{gud-print}). If Emacs +does not print the exact expression that you want, mark it as a region +first. + +@need 3000 +@item C-c C-r +@kindex C-c C-r @r{(GUD)} +@itemx C-x C-a C-r +@findex gud-cont +Continue execution without specifying any stopping point. The program +will run until it hits a breakpoint, terminates, or gets a signal that +the debugger is checking for (@code{gud-cont}). + +@need 1000 +@item C-c C-d +@kindex C-c C-d @r{(GUD)} +@itemx C-x C-a C-d +@findex gud-remove +Delete the breakpoint(s) on the current source line, if any +(@code{gud-remove}). If you use this command in the GUD interaction +buffer, it applies to the line where the program last stopped. + +@item C-c C-t +@kindex C-c C-t @r{(GUD)} +@itemx C-x C-a C-t +@findex gud-tbreak +Set a temporary breakpoint on the current source line, if any +(@code{gud-tbreak}). If you use this command in the GUD interaction +buffer, it applies to the line where the program last stopped. + +@item C-c < +@kindex C-c < @r{(GUD)} +@itemx C-x C-a < +@findex gud-up +Select the next enclosing stack frame (@code{gud-up}). This is +equivalent to the GDB command @samp{up}. + +@item C-c > +@kindex C-c > @r{(GUD)} +@itemx C-x C-a > +@findex gud-down +Select the next inner stack frame (@code{gud-down}). This is +equivalent to the GDB command @samp{down}. + +@item C-c C-u +@kindex C-c C-u @r{(GUD)} +@itemx C-x C-a C-u +@findex gud-until +Continue execution to the current line (@code{gud-until}). The +program will run until it hits a breakpoint, terminates, gets a signal +that the debugger is checking for, or reaches the line on which the +cursor currently sits. + +@item C-c C-f +@kindex C-c C-f @r{(GUD)} +@itemx C-x C-a C-f +@findex gud-finish +Run the program until the selected stack frame returns or +stops for some other reason (@code{gud-finish}). +@end table + + If you are using GDB, these additional key bindings are available: + +@table @kbd +@item C-x C-a C-j +@kindex C-x C-a C-j @r{(GUD)} +@findex gud-jump +Only useful in a source buffer, @code{gud-jump} transfers the +program's execution point to the current line. In other words, the +next line that the program executes will be the one where you gave the +command. If the new execution line is in a different function from +the previously one, GDB prompts for confirmation since the results may +be bizarre. See the GDB manual entry regarding @code{jump} for +details. + +@item @key{TAB} +@kindex TAB @r{(GUD)} +@findex gud-gdb-complete-command +With GDB, complete a symbol name (@code{gud-gdb-complete-command}). +This key is available only in the GUD interaction buffer. +@end table + + These commands interpret a numeric argument as a repeat count, when +that makes sense. + + Because @key{TAB} serves as a completion command, you can't use it to +enter a tab as input to the program you are debugging with GDB. +Instead, type @kbd{C-q @key{TAB}} to enter a tab. + +@node GUD Customization +@subsection GUD Customization + +@vindex gdb-mode-hook +@vindex dbx-mode-hook +@vindex sdb-mode-hook +@vindex xdb-mode-hook +@vindex perldb-mode-hook +@vindex pdb-mode-hook +@vindex jdb-mode-hook + On startup, GUD runs one of the following hooks: @code{gdb-mode-hook}, +if you are using GDB; @code{dbx-mode-hook}, if you are using DBX; +@code{sdb-mode-hook}, if you are using SDB; @code{xdb-mode-hook}, if you +are using XDB; @code{perldb-mode-hook}, for Perl debugging mode; +@code{pdb-mode-hook}, for PDB; @code{jdb-mode-hook}, for JDB. You can +use these hooks to define custom key bindings for the debugger +interaction buffer. @xref{Hooks}. + + Here is a convenient way to define a command that sends a particular +command string to the debugger, and set up a key binding for it in the +debugger interaction buffer: + +@findex gud-def +@example +(gud-def @var{function} @var{cmdstring} @var{binding} @var{docstring}) +@end example + + This defines a command named @var{function} which sends +@var{cmdstring} to the debugger process, and gives it the documentation +string @var{docstring}. You can then use the command @var{function} in any +buffer. If @var{binding} is non-@code{nil}, @code{gud-def} also binds +the command to @kbd{C-c @var{binding}} in the GUD buffer's mode and to +@kbd{C-x C-a @var{binding}} generally. + + The command string @var{cmdstring} may contain certain +@samp{%}-sequences that stand for data to be filled in at the time +@var{function} is called: + +@table @samp +@item %f +The name of the current source file. If the current buffer is the GUD +buffer, then the ``current source file'' is the file that the program +stopped in. + +@item %l +The number of the current source line. If the current buffer is the GUD +buffer, then the ``current source line'' is the line that the program +stopped in. + +@item %e +In transient-mark-mode the text in the region, if it is active. +Otherwise the text of the C lvalue or function-call expression at or +adjacent to point. + +@item %a +The text of the hexadecimal address at or adjacent to point. + +@item %p +The numeric argument of the called function, as a decimal number. If +the command is used without a numeric argument, @samp{%p} stands for the +empty string. + +If you don't use @samp{%p} in the command string, the command you define +ignores any numeric argument. + +@item %d +The name of the directory of the current source file. + +@item %c +Fully qualified class name derived from the expression surrounding point +(jdb only). +@end table + +@node GDB Graphical Interface +@subsection GDB Graphical Interface + + By default, the command @code{gdb} starts GDB using a graphical +interface, using Emacs windows for display program state information. +In effect, this makes Emacs into an IDE (interactive development +environment). With it, you do not need to use textual GDB commands; +you can control the debugging session with the mouse. For example, +you can click in the fringe of a source buffer to set a breakpoint +there, or on a stack frame in the stack buffer to select that frame. + + This mode requires telling GDB that its ``screen size'' is +unlimited, so it sets the height and width accordingly. For correct +operation you must not change these values during the GDB session. + +@vindex gud-gdb-command-name +@findex gdba + You can also run GDB in text command mode, like other debuggers. To +do this, replace the GDB @code{"--annotate=3"} option with +@code{"--fullname"} either in the minibuffer for the current Emacs +session, or the custom variable @code{gud-gdb-command-name} for all +future sessions. You need to use text command mode to debug multiple +programs within one Emacs session. If you have customized +@code{gud-gdb-command-name} in this way, you can use @kbd{M-x gdba} to +invoke GDB in graphical mode. Moreover, this command succeeds where +@kbd{M-x gdb} fails, such as when your @file{.gdbinit} file contains +executable GDB commands. + +@menu +* GDB-UI Layout:: Control the number of displayed buffers. +* Source Buffers:: Use the mouse in the fringe/margin to + control your program. +* Breakpoints Buffer:: A breakpoint control panel. +* Stack Buffer:: Select a frame from the call stack. +* Other GDB-UI Buffers:: Input/output, locals, registers, + assembler, threads and memory buffers. +* Watch Expressions:: Monitor variable values in the speedbar. +@end menu + +@node GDB-UI Layout +@subsubsection GDB User Interface Layout +@cindex GDB User Interface layout + +@vindex gdb-many-windows + If the variable @code{gdb-many-windows} is @code{nil} (the default +value) then @kbd{M-x gdb} normally displays only the GUD buffer. +However, if the variable @code{gdb-show-main} is also non-@code{nil}, +it starts with two windows: one displaying the GUD buffer, and the +other showing the source for the @code{main} function of the program +you are debugging. + + If @code{gdb-many-windows} is non-@code{nil}, then @kbd{M-x gdb} +displays the following frame layout: + +@smallexample +@group ++--------------------------------+--------------------------------+ +| GUD buffer (I/O of GDB) | Locals buffer | +|--------------------------------+--------------------------------+ +| Primary Source buffer | I/O buffer for debugged pgm | +|--------------------------------+--------------------------------+ +| Stack buffer | Breakpoints buffer | ++--------------------------------+--------------------------------+ +@end group +@end smallexample + + However, if @code{gdb-use-separate-io-buffer} is @code{nil}, the I/O +buffer does not appear and the primary source buffer occupies the full +width of the frame. + +@findex gdb-restore-windows + If you change the window layout, for example, while editing and +re-compiling your program, then you can restore this standard window +layout with the command @code{gdb-restore-windows}. + +@findex gdb-many-windows + To switch between this standard layout and a simple layout +containing just the GUD buffer and a source file, type @kbd{M-x +gdb-many-windows}. + + You may also specify additional GDB-related buffers to display, +either in the same frame or a different one. Select the buffers you +want with the @samp{GUD->GDB-windows} and @samp{GUD->GDB-Frames} +sub-menus. If the menu-bar is unavailable, type @code{M-x +gdb-display-@var{buffertype}-buffer} or @code{M-x +gdb-frame-@var{buffertype}-buffer} respectively, where +@var{buffertype} is the relevant buffer type, such as +@samp{breakpoints}. Most of these buffers are read-only, and typing +@kbd{q} in them kills them. + + When you finish debugging, kill the GUD buffer with @kbd{C-x k}, +which will also kill all the buffers associated with the session. +However you need not do this if, after editing and re-compiling your +source code within Emacs, you wish continue debugging. When you +restart execution, GDB will automatically find your new executable. +Keeping the GUD buffer has the advantage of keeping the shell history +as well as GDB's breakpoints. You do need to check that the +breakpoints in recently edited source files are still in the right +places. + +@node Source Buffers +@subsubsection Source Buffers +@cindex GDB commands in Fringe + +@c @findex gdb-mouse-set-clear-breakpoint +@c @findex gdb-mouse-toggle-breakpoint +Many GDB commands can be entered using keybindings or the tool bar but +sometimes it is quicker to use the fringe. These commands either +manipulate breakpoints or control program execution. When there is no +fringe, you can use the margin but this is only present when the +source file already has a breakpoint. + +You can click @kbd{Mouse-1} in the fringe or display margin of a +source buffer to set a breakpoint there and, on a graphical display, a +red bullet will appear on that line. If a breakpoint already exists +on that line, the same click will remove it. You can also enable or +disable a breakpoint by clicking @kbd{C-Mouse-1} on the bullet. + +A solid arrow in the left fringe of a source buffer indicates the line +of the innermost frame where the debugged program has stopped. A +hollow arrow indicates the current execution line of higher level +frames. + +If you drag the arrow in the fringe with @kbd{Mouse-1} +(@code{gdb-mouse-until}), execution will continue to the line where +you release the button, provided it is still in the same frame. +Alternatively, you can click @kbd{Mouse-3} at some point in the fringe +of this buffer and execution will advance to there. A similar command +(@code{gdb-mouse-jump}) allows you to jump to a source line without +executing the intermediate lines by clicking @kbd{C-Mouse-3}. This +command allows you to go backwards which can be useful for running +through code that has already executed, in order to examine its +execution in more detail. + +@table @kbd +@item Mouse-1 +Set or clear a breakpoint. + +@item C-Mouse-1 +Enable or disable a breakpoint. + +@item Mouse-3 +Continue execution to here. + +@item C-Mouse-3 +Jump to here. +@end table + +If the variable @code{gdb-find-source-frame} is non-@code{nil} and +execution stops in a frame for which there is no source code e.g after +an interrupt, then Emacs finds and displays the first frame further up +stack for which there is source. If it is @code{nil} then the source +buffer continues to display the last frame which maybe more useful, +for example, when re-setting a breakpoint. + +@node Breakpoints Buffer +@subsubsection Breakpoints Buffer + + The breakpoints buffer shows the existing breakpoints, watchpoints and +catchpoints (@pxref{Breakpoints,,, gdb, The GNU debugger}). It has +these special commands, which mostly apply to the @dfn{current +breakpoint}, the breakpoint which point is on. + +@table @kbd +@item @key{SPC} +@kindex SPC @r{(GDB breakpoints buffer)} +@findex gdb-toggle-breakpoint +Enable/disable the current breakpoint (@code{gdb-toggle-breakpoint}). +On a graphical display, this changes the color of a bullet in the +margin of a source buffer at the relevant line. This is red when +the breakpoint is enabled and grey when it is disabled. Text-only +terminals correspondingly display a @samp{B} or @samp{b}. + +@item D +@kindex D @r{(GDB breakpoints buffer)} +@findex gdb-delete-breakpoint +Delete the current breakpoint (@code{gdb-delete-breakpoint}). + +@item @key{RET} +@kindex RET @r{(GDB breakpoints buffer)} +@findex gdb-goto-breakpoint +Visit the source line for the current breakpoint +(@code{gdb-goto-breakpoint}). + +@item Mouse-2 +@kindex Mouse-2 @r{(GDB breakpoints buffer)} +Visit the source line for the breakpoint you click on. +@end table + +@node Stack Buffer +@subsubsection Stack Buffer + + The stack buffer displays a @dfn{call stack}, with one line for each +of the nested subroutine calls (@dfn{stack frames}) now active in the +program. @xref{Backtrace,, Backtraces, gdb, The GNU debugger}. + +@findex gdb-frames-select +An arrow in the fringe points to the selected frame or, if the fringe is +not present, the number of the selected frame is displayed in reverse +contrast. To select a frame in GDB, move point in the stack buffer to +that stack frame and type @key{RET} (@code{gdb-frames-select}), or click +@kbd{Mouse-2} on a stack frame. If the locals buffer is visible, +selecting a stack frame updates it to display the local variables of the +new frame. + +@node Other GDB-UI Buffers +@subsubsection Other Buffers + +@table @asis +@item Input/Output Buffer +@vindex gdb-use-separate-io-buffer +If the variable @code{gdb-use-separate-io-buffer} is non-@code{nil}, +the program being debugged takes its input and displays its output +here. Otherwise it uses the GUD buffer for that. To toggle whether +GUD mode uses this buffer, do @kbd{M-x gdb-use-separate-io-buffer}. +This takes effect when you next restart the program you are debugging. + +The history and replay commands from Shell mode are available here, +as are the commands to send signals to the debugged program. +@xref{Shell Mode}. + +@item Locals Buffer +The locals buffer displays the values of local variables of the +current frame for simple data types (@pxref{Frame Info, Frame Info, +Information on a frame, gdb, The GNU debugger}). Press @key{RET} or +click @kbd{Mouse-2} on the value if you want to edit it. + +Arrays and structures display their type only. With GDB 6.4 or later, +move point to their name and press @key{RET}, or alternatively click +@kbd{Mouse-2} there, to examine their values. With earlier versions +of GDB, use @kbd{Mouse-2} or @key{RET} on the type description +(@samp{[struct/union]} or @samp{[array]}). @xref{Watch Expressions}. + +@item Registers Buffer +@findex toggle-gdb-all-registers +The registers buffer displays the values held by the registers +(@pxref{Registers,,, gdb, The GNU debugger}). Press @key{RET} or +click @kbd{Mouse-2} on a register if you want to edit its value. +With GDB 6.4 or later, recently changed register values display with +@code{font-lock-warning-face}. With earlier versions of GDB, you can +press @key{SPC} to toggle the display of floating point registers +(@code{toggle-gdb-all-registers}). + +@item Assembler Buffer +The assembler buffer displays the current frame as machine code. An +arrow points to the current instruction, and you can set and remove +breakpoints as in a source buffer. Breakpoint icons also appear in +the fringe or margin. + +@item Threads Buffer +@findex gdb-threads-select +The threads buffer displays a summary of all threads currently in your +program (@pxref{Threads, Threads, Debugging programs with multiple +threads, gdb, The GNU debugger}). Move point to any thread in the +list and press @key{RET} to select it (@code{gdb-threads-select}) and +display the associated source in the primary source buffer. +Alternatively, click @kbd{Mouse-2} on a thread to select it. If the +locals buffer is visible, its contents update to display the variables +that are local in the new thread. + +@item Memory Buffer +The memory buffer lets you examine sections of program memory +(@pxref{Memory, Memory, Examining memory, gdb, The GNU debugger}). +Click @kbd{Mouse-1} on the appropriate part of the header line to +change the starting address or number of data items that the buffer +displays. Click @kbd{Mouse-3} on the header line to select the +display format or unit size for these data items. +@end table + +@node Watch Expressions +@subsubsection Watch Expressions +@cindex Watching expressions in GDB + +@findex gud-watch +@kindex C-x C-a C-w @r{(GUD)} + If you want to see how a variable changes each time your program +stops, move point into the variable name and click on the watch icon +in the tool bar (@code{gud-watch}) or type @kbd{C-x C-a C-w}. If you +specify a prefix argument, you can enter the variable name in the +minibuffer. + + Each watch expression is displayed in the speedbar. Complex data +types, such as arrays, structures and unions are represented in a tree +format. Leaves and simple data types show the name of the expression +and its value and, when the speedbar frame is selected, display the +type as a tooltip. Higher levels show the name, type and address +value for pointers and just the name and type otherwise. Root expressions +also display the frame address as a tooltip to help identify the frame +in which they were defined. + + To expand or contract a complex data type, click @kbd{Mouse-2} or +press @key{SPC} on the tag to the left of the expression. Emacs asks +for confirmation before expanding the expression if its number of +immediate children exceeds the value of the variable +@code{gdb-max-children}. + +@kindex D @r{(GDB speedbar)} +@findex gdb-var-delete + To delete a complex watch expression, move point to the root +expression in the speedbar and type @kbd{D} (@code{gdb-var-delete}). + +@kindex RET @r{(GDB speedbar)} +@findex gdb-edit-value + To edit a variable with a simple data type, or a simple element of a +complex data type, move point there in the speedbar and type @key{RET} +(@code{gdb-edit-value}). Or you can click @kbd{Mouse-2} on a value to +edit it. Either way, this reads the new value using the minibuffer. + +@vindex gdb-show-changed-values + If you set the variable @code{gdb-show-changed-values} to +non-@code{nil} (the default value), Emacs uses +@code{font-lock-warning-face} to highlight values that have recently +changed and @code{shadow} face to make variables which have gone out of +scope less noticeable. When a variable goes out of scope you can't +edit its value. + +@vindex gdb-use-colon-colon-notation + If the variable @code{gdb-use-colon-colon-notation} is +non-@code{nil}, Emacs uses the @samp{@var{function}::@var{variable}} +format. This allows the user to display watch expressions which share +the same variable name. The default value is @code{nil}. + +@vindex gdb-speedbar-auto-raise +To automatically raise the speedbar every time the display of watch +expressions updates, set @code{gdb-speedbar-auto-raise} to +non-@code{nil}. This can be useful if you are debugging with a full +screen Emacs frame. + +@node Executing Lisp +@section Executing Lisp Expressions + + Emacs has several different major modes for Lisp and Scheme. They are +the same in terms of editing commands, but differ in the commands for +executing Lisp expressions. Each mode has its own purpose. + +@table @asis +@item Emacs-Lisp mode +The mode for editing source files of programs to run in Emacs Lisp. +This mode defines @kbd{C-M-x} to evaluate the current defun. +@xref{Lisp Libraries}. +@item Lisp Interaction mode +The mode for an interactive session with Emacs Lisp. It defines +@kbd{C-j} to evaluate the sexp before point and insert its value in the +buffer. @xref{Lisp Interaction}. +@item Lisp mode +The mode for editing source files of programs that run in Lisps other +than Emacs Lisp. This mode defines @kbd{C-M-x} to send the current defun +to an inferior Lisp process. @xref{External Lisp}. +@item Inferior Lisp mode +The mode for an interactive session with an inferior Lisp process. +This mode combines the special features of Lisp mode and Shell mode +(@pxref{Shell Mode}). +@item Scheme mode +Like Lisp mode but for Scheme programs. +@item Inferior Scheme mode +The mode for an interactive session with an inferior Scheme process. +@end table + + Most editing commands for working with Lisp programs are in fact +available globally. @xref{Programs}. + +@node Lisp Libraries +@section Libraries of Lisp Code for Emacs +@cindex libraries +@cindex loading Lisp code + + Lisp code for Emacs editing commands is stored in files whose names +conventionally end in @file{.el}. This ending tells Emacs to edit them in +Emacs-Lisp mode (@pxref{Executing Lisp}). + +@cindex byte code + Emacs Lisp code can be compiled into byte-code, which loads faster, +takes up less space, and executes faster. @xref{Byte Compilation,, +Byte Compilation, elisp, the Emacs Lisp Reference Manual}. By +convention, the compiled code for a library goes in a separate file +whose name ends in @samp{.elc}. Thus, the compiled code for +@file{foo.el} goes in @file{foo.elc}. + +@findex load-file + To execute a file of Emacs Lisp code, use @kbd{M-x load-file}. This +command reads a file name using the minibuffer and then executes the +contents of that file as Lisp code. It is not necessary to visit the +file first; in any case, this command reads the file as found on disk, +not text in an Emacs buffer. + +@findex load +@findex load-library + Once a file of Lisp code is installed in the Emacs Lisp library +directories, users can load it using @kbd{M-x load-library}. Programs +can load it by calling @code{load}, a more primitive function that is +similar but accepts some additional arguments. + + @kbd{M-x load-library} differs from @kbd{M-x load-file} in that it +searches a sequence of directories and tries three file names in each +directory. Suppose your argument is @var{lib}; the three names are +@file{@var{lib}.elc}, @file{@var{lib}.el}, and lastly just +@file{@var{lib}}. If @file{@var{lib}.elc} exists, it is by convention +the result of compiling @file{@var{lib}.el}; it is better to load the +compiled file, since it will load and run faster. + + If @code{load-library} finds that @file{@var{lib}.el} is newer than +@file{@var{lib}.elc} file, it issues a warning, because it's likely +that somebody made changes to the @file{.el} file and forgot to +recompile it. Nonetheless, it loads @file{@var{lib}.elc}. This is +because people often leave unfinished edits the source file, and don't +recompile it until they think it is ready to use. + + Because the argument to @code{load-library} is usually not in itself +a valid file name, file name completion is not available. Indeed, when +using this command, you usually do not know exactly what file name +will be used. + +@vindex load-path + The sequence of directories searched by @kbd{M-x load-library} is +specified by the variable @code{load-path}, a list of strings that are +directory names. The default value of the list contains the directories where +the Lisp code for Emacs itself is stored. If you have libraries of +your own, put them in a single directory and add that directory +to @code{load-path}. @code{nil} in this list stands for the current default +directory, but it is probably not a good idea to put @code{nil} in the +list. If you find yourself wishing that @code{nil} were in the list, +most likely what you really want to do is use @kbd{M-x load-file} +this once. + +@cindex autoload + Often you do not have to give any command to load a library, because +the commands defined in the library are set up to @dfn{autoload} that +library. Trying to run any of those commands calls @code{load} to load +the library; this replaces the autoload definitions with the real ones +from the library. + +@vindex load-dangerous-libraries +@cindex Lisp files byte-compiled by XEmacs + By default, Emacs refuses to load compiled Lisp files which were +compiled with XEmacs, a modified versions of Emacs---they can cause +Emacs to crash. Set the variable @code{load-dangerous-libraries} to +@code{t} if you want to try loading them. + +@node Lisp Eval +@section Evaluating Emacs Lisp Expressions +@cindex Emacs-Lisp mode +@cindex mode, Emacs-Lisp + +@findex emacs-lisp-mode + Lisp programs intended to be run in Emacs should be edited in +Emacs-Lisp mode; this happens automatically for file names ending in +@file{.el}. By contrast, Lisp mode itself is used for editing Lisp +programs intended for other Lisp systems. To switch to Emacs-Lisp mode +explicitly, use the command @kbd{M-x emacs-lisp-mode}. + + For testing of Lisp programs to run in Emacs, it is often useful to +evaluate part of the program as it is found in the Emacs buffer. For +example, after changing the text of a Lisp function definition, +evaluating the definition installs the change for future calls to the +function. Evaluation of Lisp expressions is also useful in any kind of +editing, for invoking noninteractive functions (functions that are +not commands). + +@table @kbd +@item M-: +Read a single Lisp expression in the minibuffer, evaluate it, and print +the value in the echo area (@code{eval-expression}). +@item C-x C-e +Evaluate the Lisp expression before point, and print the value in the +echo area (@code{eval-last-sexp}). +@item C-M-x +Evaluate the defun containing or after point, and print the value in +the echo area (@code{eval-defun}). +@item M-x eval-region +Evaluate all the Lisp expressions in the region. +@item M-x eval-buffer +Evaluate all the Lisp expressions in the buffer. +@end table + +@ifinfo +@c This uses ``colon'' instead of a literal `:' because Info cannot +@c cope with a `:' in a menu +@kindex M-@key{colon} +@end ifinfo +@ifnotinfo +@kindex M-: +@end ifnotinfo +@findex eval-expression + @kbd{M-:} (@code{eval-expression}) is the most basic command for evaluating +a Lisp expression interactively. It reads the expression using the +minibuffer, so you can execute any expression on a buffer regardless of +what the buffer contains. When the expression is evaluated, the current +buffer is once again the buffer that was current when @kbd{M-:} was +typed. + +@kindex C-M-x @r{(Emacs-Lisp mode)} +@findex eval-defun + In Emacs-Lisp mode, the key @kbd{C-M-x} is bound to the command +@code{eval-defun}, which parses the defun containing or following point +as a Lisp expression and evaluates it. The value is printed in the echo +area. This command is convenient for installing in the Lisp environment +changes that you have just made in the text of a function definition. + + @kbd{C-M-x} treats @code{defvar} expressions specially. Normally, +evaluating a @code{defvar} expression does nothing if the variable it +defines already has a value. But @kbd{C-M-x} unconditionally resets the +variable to the initial value specified in the @code{defvar} expression. +@code{defcustom} expressions are treated similarly. +This special feature is convenient for debugging Lisp programs. +Typing @kbd{C-M-x} on a @code{defface} expression reinitializes +the face according to the @code{defface} specification. + +@kindex C-x C-e +@findex eval-last-sexp + The command @kbd{C-x C-e} (@code{eval-last-sexp}) evaluates the Lisp +expression preceding point in the buffer, and displays the value in the +echo area. It is available in all major modes, not just Emacs-Lisp +mode. It does not treat @code{defvar} specially. + + When the result of an evaluation is an integer, you can type +@kbd{C-x C-e} a second time to display the value of the integer result +in additional formats (octal, hexadecimal, and character). + + If @kbd{C-x C-e}, or @kbd{M-:} is given a numeric argument, it +inserts the value into the current buffer at point, rather than +displaying it in the echo area. The argument's value does not matter. +@kbd{C-M-x} with a numeric argument instruments the function +definition for Edebug (@pxref{Instrumenting, Instrumenting for Edebug,, elisp, the Emacs Lisp Reference Manual}). + +@findex eval-region +@findex eval-buffer + The most general command for evaluating Lisp expressions from a buffer +is @code{eval-region}. @kbd{M-x eval-region} parses the text of the +region as one or more Lisp expressions, evaluating them one by one. +@kbd{M-x eval-buffer} is similar but evaluates the entire +buffer. This is a reasonable way to install the contents of a file of +Lisp code that you are ready to test. Later, as you find bugs and +change individual functions, use @kbd{C-M-x} on each function that you +change. This keeps the Lisp world in step with the source file. + +@vindex eval-expression-print-level +@vindex eval-expression-print-length +@vindex eval-expression-debug-on-error + The two customizable variables @code{eval-expression-print-level} and +@code{eval-expression-print-length} control the maximum depth and length +of lists to print in the result of the evaluation commands before +abbreviating them. @code{eval-expression-debug-on-error} controls +whether evaluation errors invoke the debugger when these commands are +used; its default is @code{t}. + +@node Lisp Interaction +@section Lisp Interaction Buffers + + The buffer @samp{*scratch*} which is selected when Emacs starts up is +provided for evaluating Lisp expressions interactively inside Emacs. + + The simplest way to use the @samp{*scratch*} buffer is to insert Lisp +expressions and type @kbd{C-j} after each expression. This command +reads the Lisp expression before point, evaluates it, and inserts the +value in printed representation before point. The result is a complete +typescript of the expressions you have evaluated and their values. + + The @samp{*scratch*} buffer's major mode is Lisp Interaction mode, which +is the same as Emacs-Lisp mode except for the binding of @kbd{C-j}. + +@findex lisp-interaction-mode + The rationale for this feature is that Emacs must have a buffer when +it starts up, but that buffer is not useful for editing files since a +new buffer is made for every file that you visit. The Lisp interpreter +typescript is the most useful thing I can think of for the initial +buffer to do. Type @kbd{M-x lisp-interaction-mode} to put the current +buffer in Lisp Interaction mode. + +@findex ielm + An alternative way of evaluating Emacs Lisp expressions interactively +is to use Inferior Emacs-Lisp mode, which provides an interface rather +like Shell mode (@pxref{Shell Mode}) for evaluating Emacs Lisp +expressions. Type @kbd{M-x ielm} to create an @samp{*ielm*} buffer +which uses this mode. For more information see that command's +documentation. + +@node External Lisp +@section Running an External Lisp + + Emacs has facilities for running programs in other Lisp systems. You can +run a Lisp process as an inferior of Emacs, and pass expressions to it to +be evaluated. You can also pass changed function definitions directly from +the Emacs buffers in which you edit the Lisp programs to the inferior Lisp +process. + +@findex run-lisp +@vindex inferior-lisp-program +@kindex C-x C-z + To run an inferior Lisp process, type @kbd{M-x run-lisp}. This runs +the program named @code{lisp}, the same program you would run by typing +@code{lisp} as a shell command, with both input and output going through +an Emacs buffer named @samp{*lisp*}. That is to say, any ``terminal +output'' from Lisp will go into the buffer, advancing point, and any +``terminal input'' for Lisp comes from text in the buffer. (You can +change the name of the Lisp executable file by setting the variable +@code{inferior-lisp-program}.) + + To give input to Lisp, go to the end of the buffer and type the input, +terminated by @key{RET}. The @samp{*lisp*} buffer is in Inferior Lisp +mode, which combines the special characteristics of Lisp mode with most +of the features of Shell mode (@pxref{Shell Mode}). The definition of +@key{RET} to send a line to a subprocess is one of the features of Shell +mode. + +@findex lisp-mode + For the source files of programs to run in external Lisps, use Lisp +mode. You can switch to this mode with @kbd{M-x lisp-mode}, and it is +used automatically for files whose names end in @file{.l}, +@file{.lsp}, or @file{.lisp}. + +@kindex C-M-x @r{(Lisp mode)} +@findex lisp-eval-defun + When you edit a function in a Lisp program you are running, the easiest +way to send the changed definition to the inferior Lisp process is the key +@kbd{C-M-x}. In Lisp mode, this runs the function @code{lisp-eval-defun}, +which finds the defun around or following point and sends it as input to +the Lisp process. (Emacs can send input to any inferior process regardless +of what buffer is current.) + + Contrast the meanings of @kbd{C-M-x} in Lisp mode (for editing +programs to be run in another Lisp system) and Emacs-Lisp mode (for +editing Lisp programs to be run in Emacs; see @pxref{Lisp Eval}): in +both modes it has the effect of installing the function definition +that point is in, but the way of doing so is different according to +where the relevant Lisp environment is found. + + +@ignore + arch-tag: 9c3c2f71-b332-4144-8500-3ff9945a50ed +@end ignore diff --git a/doc/emacs/cal-xtra.texi b/doc/emacs/cal-xtra.texi new file mode 100644 index 00000000000..61d519cbd12 --- /dev/null +++ b/doc/emacs/cal-xtra.texi @@ -0,0 +1,838 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@c +@c This file is included either in emacs-xtra.texi (when producing the +@c printed version) or in the main Emacs manual (for the on-line version). + +@c Moved here from the Emacs Lisp Reference Manual, 2005-03-26. +@node Advanced Calendar/Diary Usage +@section Customizing the Calendar and Diary + + There are many customizations that you can use to make the calendar and +diary suit your personal tastes. + +@menu +* Calendar Customizing:: Defaults you can set. +* Holiday Customizing:: Defining your own holidays. +* Date Display Format:: Changing the format. +* Time Display Format:: Changing the format. +* Diary Customizing:: Defaults you can set. +* Hebrew/Islamic Entries:: How to obtain them. +* Fancy Diary Display:: Enhancing the diary display, sorting entries, + using included diary files. +* Sexp Diary Entries:: Fancy things you can do. +@end menu + +@node Calendar Customizing +@subsection Customizing the Calendar +@vindex calendar-holiday-marker +@vindex diary-entry-marker + The variable @code{calendar-holiday-marker} specifies how to mark a +date as being a holiday. Its value may be a single-character string +to insert next to the date, or a face name to use for displaying the +date. Likewise, the variable @code{diary-entry-marker} specifies how +to mark a date that has diary entries. The calendar creates faces +named @code{holiday-face} and @code{diary-face} for these purposes; +those symbols are the default values of these variables. + +@vindex calendar-load-hook + The variable @code{calendar-load-hook} is a normal hook run when the +calendar package is first loaded (before actually starting to display +the calendar). + +@vindex initial-calendar-window-hook + Starting the calendar runs the normal hook +@code{initial-calendar-window-hook}. Recomputation of the calendar +display does not run this hook. But if you leave the calendar with the +@kbd{q} command and reenter it, the hook runs again.@refill + +@vindex today-visible-calendar-hook + The variable @code{today-visible-calendar-hook} is a normal hook run +after the calendar buffer has been prepared with the calendar when the +current date is visible in the window. One use of this hook is to +replace today's date with asterisks; to do that, use the hook function +@code{calendar-star-date}. + +@findex calendar-star-date +@example +(add-hook 'today-visible-calendar-hook 'calendar-star-date) +@end example + +@noindent +Another standard hook function marks the current date, either by +changing its face or by adding an asterisk. Here's how to use it: + +@findex calendar-mark-today +@example +(add-hook 'today-visible-calendar-hook 'calendar-mark-today) +@end example + +@noindent +@vindex calendar-today-marker +The variable @code{calendar-today-marker} specifies how to mark +today's date. Its value should be a single-character string to insert +next to the date or a face name to use for displaying the date. A +face named @code{calendar-today-face} is provided for this purpose; +that symbol is the default for this variable. + +@vindex today-invisible-calendar-hook +@noindent + A similar normal hook, @code{today-invisible-calendar-hook} is run if +the current date is @emph{not} visible in the window. + +@vindex calendar-move-hook + Each of the calendar cursor motion commands runs the hook +@code{calendar-move-hook} after it moves the cursor. + +@node Holiday Customizing +@subsection Customizing the Holidays + +@vindex calendar-holidays +@vindex christian-holidays +@vindex hebrew-holidays +@vindex islamic-holidays + Emacs knows about holidays defined by entries on one of several lists. +You can customize these lists of holidays to your own needs, adding or +deleting holidays. The lists of holidays that Emacs uses are for +general holidays (@code{general-holidays}), local holidays +(@code{local-holidays}), Christian holidays (@code{christian-holidays}), +Hebrew (Jewish) holidays (@code{hebrew-holidays}), Islamic (Muslim) +holidays (@code{islamic-holidays}), and other holidays +(@code{other-holidays}). + +@vindex general-holidays + The general holidays are, by default, holidays common throughout the +United States. To eliminate these holidays, set @code{general-holidays} +to @code{nil}. + +@vindex local-holidays + There are no default local holidays (but sites may supply some). You +can set the variable @code{local-holidays} to any list of holidays, as +described below. + +@vindex all-christian-calendar-holidays +@vindex all-hebrew-calendar-holidays +@vindex all-islamic-calendar-holidays + By default, Emacs does not include all the holidays of the religions +that it knows, only those commonly found in secular calendars. For a +more extensive collection of religious holidays, you can set any (or +all) of the variables @code{all-christian-calendar-holidays}, +@code{all-hebrew-calendar-holidays}, or +@code{all-islamic-calendar-holidays} to @code{t}. If you want to +eliminate the religious holidays, set any or all of the corresponding +variables @code{christian-holidays}, @code{hebrew-holidays}, and +@code{islamic-holidays} to @code{nil}.@refill + +@vindex other-holidays + You can set the variable @code{other-holidays} to any list of +holidays. This list, normally empty, is intended for individual use. + +@cindex holiday forms + Each of the lists (@code{general-holidays}, @code{local-holidays}, +@code{christian-holidays}, @code{hebrew-holidays}, +@code{islamic-holidays}, and @code{other-holidays}) is a list of +@dfn{holiday forms}, each holiday form describing a holiday (or +sometimes a list of holidays). + + Here is a table of the possible kinds of holiday form. Day numbers +and month numbers count starting from 1, but ``dayname'' numbers +count Sunday as 0. The element @var{string} is always the +name of the holiday, as a string. + +@table @code +@item (holiday-fixed @var{month} @var{day} @var{string}) +A fixed date on the Gregorian calendar. + +@item (holiday-float @var{month} @var{dayname} @var{k} @var{string}) +The @var{k}th @var{dayname} in @var{month} on the Gregorian calendar +(@var{dayname}=0 for Sunday, and so on); negative @var{k} means count back +from the end of the month. + +@item (holiday-hebrew @var{month} @var{day} @var{string}) +A fixed date on the Hebrew calendar. + +@item (holiday-islamic @var{month} @var{day} @var{string}) +A fixed date on the Islamic calendar. + +@item (holiday-julian @var{month} @var{day} @var{string}) +A fixed date on the Julian calendar. + +@item (holiday-sexp @var{sexp} @var{string}) +A date calculated by the Lisp expression @var{sexp}. The expression +should use the variable @code{year} to compute and return the date of a +holiday, or @code{nil} if the holiday doesn't happen this year. The +value of @var{sexp} must represent the date as a list of the form +@code{(@var{month} @var{day} @var{year})}. + +@item (if @var{condition} @var{holiday-form}) +A holiday that happens only if @var{condition} is true. + +@item (@var{function} @r{[}@var{args}@r{]}) +A list of dates calculated by the function @var{function}, called with +arguments @var{args}. +@end table + + For example, suppose you want to add Bastille Day, celebrated in +France on July 14. You can do this as follows: + +@smallexample +(setq other-holidays '((holiday-fixed 7 14 "Bastille Day"))) +@end smallexample + +@noindent +The holiday form @code{(holiday-fixed 7 14 "Bastille Day")} specifies the +fourteenth day of the seventh month (July). + + Many holidays occur on a specific day of the week, at a specific time +of month. Here is a holiday form describing Hurricane Supplication Day, +celebrated in the Virgin Islands on the fourth Monday in August: + +@smallexample +(holiday-float 8 1 4 "Hurricane Supplication Day") +@end smallexample + +@noindent +Here the 8 specifies August, the 1 specifies Monday (Sunday is 0, +Tuesday is 2, and so on), and the 4 specifies the fourth occurrence in +the month (1 specifies the first occurrence, 2 the second occurrence, +@minus{}1 the last occurrence, @minus{}2 the second-to-last occurrence, and +so on). + + You can specify holidays that occur on fixed days of the Hebrew, +Islamic, and Julian calendars too. For example, + +@smallexample +(setq other-holidays + '((holiday-hebrew 10 2 "Last day of Hanukkah") + (holiday-islamic 3 12 "Mohammed's Birthday") + (holiday-julian 4 2 "Jefferson's Birthday"))) +@end smallexample + +@noindent +adds the last day of Hanukkah (since the Hebrew months are numbered with +1 starting from Nisan), the Islamic feast celebrating Mohammed's +birthday (since the Islamic months are numbered from 1 starting with +Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the +Julian calendar. + + To include a holiday conditionally, use either Emacs Lisp's @code{if} or the +@code{holiday-sexp} form. For example, American presidential elections +occur on the first Tuesday after the first Monday in November of years +divisible by 4: + +@smallexample +(holiday-sexp '(if (= 0 (% year 4)) + (calendar-gregorian-from-absolute + (1+ (calendar-dayname-on-or-before + 1 (+ 6 (calendar-absolute-from-gregorian + (list 11 1 year))))))) + "US Presidential Election") +@end smallexample + +@noindent +or + +@smallexample +(if (= 0 (% displayed-year 4)) + (fixed 11 + (extract-calendar-day + (calendar-gregorian-from-absolute + (1+ (calendar-dayname-on-or-before + 1 (+ 6 (calendar-absolute-from-gregorian + (list 11 1 displayed-year))))))) + "US Presidential Election")) +@end smallexample + + Some holidays just don't fit into any of these forms because special +calculations are involved in their determination. In such cases you +must write a Lisp function to do the calculation. To include eclipses, +for example, add @code{(eclipses)} to @code{other-holidays} +and write an Emacs Lisp function @code{eclipses} that returns a +(possibly empty) list of the relevant Gregorian dates among the range +visible in the calendar window, with descriptive strings, like this: + +@smallexample +(((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... ) +@end smallexample + +@node Date Display Format +@subsection Date Display Format +@vindex calendar-date-display-form + + You can customize the manner of displaying dates in the diary, in mode +lines, and in messages by setting @code{calendar-date-display-form}. +This variable holds a list of expressions that can involve the variables +@code{month}, @code{day}, and @code{year}, which are all numbers in +string form, and @code{monthname} and @code{dayname}, which are both +alphabetic strings. In the American style, the default value of this +list is as follows: + +@smallexample +((if dayname (concat dayname ", ")) monthname " " day ", " year) +@end smallexample + +@noindent +while in the European style this value is the default: + +@smallexample +((if dayname (concat dayname ", ")) day " " monthname " " year) +@end smallexample + +@noindent +The ISO standard date representation is this: + +@smallexample +(year "-" month "-" day) +@end smallexample + +@noindent +This specifies a typical American format: + +@smallexample +(month "/" day "/" (substring year -2)) +@end smallexample + +@node Time Display Format +@subsection Time Display Format +@vindex calendar-time-display-form + + The calendar and diary by default display times of day in the +conventional American style with the hours from 1 through 12, minutes, +and either @samp{am} or @samp{pm}. If you prefer the European style, +also known in the US as military, in which the hours go from 00 to 23, +you can alter the variable @code{calendar-time-display-form}. This +variable is a list of expressions that can involve the variables +@code{12-hours}, @code{24-hours}, and @code{minutes}, which are all +numbers in string form, and @code{am-pm} and @code{time-zone}, which are +both alphabetic strings. The default value of +@code{calendar-time-display-form} is as follows: + +@smallexample +(12-hours ":" minutes am-pm + (if time-zone " (") time-zone (if time-zone ")")) +@end smallexample + +@noindent +Here is a value that provides European style times: + +@smallexample +(24-hours ":" minutes + (if time-zone " (") time-zone (if time-zone ")")) +@end smallexample + +@node Diary Customizing +@subsection Customizing the Diary + +@vindex holidays-in-diary-buffer + Ordinarily, the mode line of the diary buffer window indicates any +holidays that fall on the date of the diary entries. The process of +checking for holidays can take several seconds, so including holiday +information delays the display of the diary buffer noticeably. If you'd +prefer to have a faster display of the diary buffer but without the +holiday information, set the variable @code{holidays-in-diary-buffer} to +@code{nil}.@refill + +@vindex number-of-diary-entries + The variable @code{number-of-diary-entries} controls the number of +days of diary entries to be displayed at one time. It affects the +initial display when @code{view-diary-entries-initially} is @code{t}, as +well as the command @kbd{M-x diary}. For example, the default value is +1, which says to display only the current day's diary entries. If the +value is 2, both the current day's and the next day's entries are +displayed. The value can also be a vector of seven elements: for +example, if the value is @code{[0 2 2 2 2 4 1]} then no diary entries +appear on Sunday, the current date's and the next day's diary entries +appear Monday through Thursday, Friday through Monday's entries appear +on Friday, while on Saturday only that day's entries appear. + +@vindex print-diary-entries-hook +@findex print-diary-entries + The variable @code{print-diary-entries-hook} is a normal hook run +after preparation of a temporary buffer containing just the diary +entries currently visible in the diary buffer. (The other, irrelevant +diary entries are really absent from the temporary buffer; in the diary +buffer, they are merely hidden.) The default value of this hook does +the printing with the command @code{lpr-buffer}. If you want to use a +different command to do the printing, just change the value of this +hook. Other uses might include, for example, rearranging the lines into +order by day and time. + +@vindex diary-date-forms + You can customize the form of dates in your diary file, if neither the +standard American nor European styles suits your needs, by setting the +variable @code{diary-date-forms}. This variable is a list of patterns +for recognizing a date. Each date pattern is a list whose elements may +be regular expressions (@pxref{Regular Expressions,,, elisp, the Emacs +Lisp Reference Manual}) or the symbols @code{month}, @code{day}, +@code{year}, @code{monthname}, and @code{dayname}. All these elements +serve as patterns that match certain kinds of text in the diary file. +In order for the date pattern, as a whole, to match, all of its elements +must match consecutively. + + A regular expression in a date pattern matches in its usual fashion, +using the standard syntax table altered so that @samp{*} is a word +constituent. + + The symbols @code{month}, @code{day}, @code{year}, @code{monthname}, +and @code{dayname} match the month number, day number, year number, +month name, and day name of the date being considered. The symbols that +match numbers allow leading zeros; those that match names allow +three-letter abbreviations and capitalization. All the symbols can +match @samp{*}; since @samp{*} in a diary entry means ``any day'', ``any +month'', and so on, it should match regardless of the date being +considered. + + The default value of @code{diary-date-forms} in the American style is +this: + +@example +((month "/" day "[^/0-9]") + (month "/" day "/" year "[^0-9]") + (monthname " *" day "[^,0-9]") + (monthname " *" day ", *" year "[^0-9]") + (dayname "\\W")) +@end example + + The date patterns in the list must be @emph{mutually exclusive} and +must not match any portion of the diary entry itself, just the date and +one character of whitespace. If, to be mutually exclusive, the pattern +must match a portion of the diary entry text---beyond the whitespace +that ends the date---then the first element of the date pattern +@emph{must} be @code{backup}. This causes the date recognizer to back +up to the beginning of the current word of the diary entry, after +finishing the match. Even if you use @code{backup}, the date pattern +must absolutely not match more than a portion of the first word of the +diary entry. The default value of @code{diary-date-forms} in the +European style is this list: + +@example +((day "/" month "[^/0-9]") + (day "/" month "/" year "[^0-9]") + (backup day " *" monthname "\\W+\\<[^*0-9]") + (day " *" monthname " *" year "[^0-9]") + (dayname "\\W")) +@end example + +@noindent +Notice the use of @code{backup} in the third pattern, because it needs +to match part of a word beyond the date itself to distinguish it from +the fourth pattern. + +@node Hebrew/Islamic Entries +@subsection Hebrew- and Islamic-Date Diary Entries + + Your diary file can have entries based on Hebrew or Islamic dates, as +well as entries based on the world-standard Gregorian calendar. +However, because recognition of such entries is time-consuming and most +people don't use them, you must explicitly enable their use. If you +want the diary to recognize Hebrew-date diary entries, for example, +you must do this: + +@vindex nongregorian-diary-listing-hook +@vindex nongregorian-diary-marking-hook +@findex list-hebrew-diary-entries +@findex mark-hebrew-diary-entries +@smallexample +(add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries) +(add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries) +@end smallexample + +@noindent +If you want Islamic-date entries, do this: + +@findex list-islamic-diary-entries +@findex mark-islamic-diary-entries +@smallexample +(add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries) +(add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries) +@end smallexample + + Hebrew- and Islamic-date diary entries have the same formats as +Gregorian-date diary entries, except that @samp{H} precedes a Hebrew +date and @samp{I} precedes an Islamic date. Moreover, because the +Hebrew and Islamic month names are not uniquely specified by the first +three letters, you may not abbreviate them. For example, a diary entry +for the Hebrew date Heshvan 25 could look like this: + +@smallexample +HHeshvan 25 Happy Hebrew birthday! +@end smallexample + +@noindent +and would appear in the diary for any date that corresponds to Heshvan 25 +on the Hebrew calendar. And here is an Islamic-date diary entry that matches +Dhu al-Qada 25: + +@smallexample +IDhu al-Qada 25 Happy Islamic birthday! +@end smallexample + + As with Gregorian-date diary entries, Hebrew- and Islamic-date entries +are nonmarking if they are preceded with an ampersand (@samp{&}). + + Here is a table of commands used in the calendar to create diary entries +that match the selected date and other dates that are similar in the Hebrew +or Islamic calendar: + +@table @kbd +@item i h d +Add a diary entry for the Hebrew date corresponding to the selected date +(@code{insert-hebrew-diary-entry}). +@item i h m +Add a diary entry for the day of the Hebrew month corresponding to the +selected date (@code{insert-monthly-hebrew-diary-entry}). This diary +entry matches any date that has the same Hebrew day-within-month as the +selected date. +@item i h y +Add a diary entry for the day of the Hebrew year corresponding to the +selected date (@code{insert-yearly-hebrew-diary-entry}). This diary +entry matches any date which has the same Hebrew month and day-within-month +as the selected date. +@item i i d +Add a diary entry for the Islamic date corresponding to the selected date +(@code{insert-islamic-diary-entry}). +@item i i m +Add a diary entry for the day of the Islamic month corresponding to the +selected date (@code{insert-monthly-islamic-diary-entry}). +@item i i y +Add a diary entry for the day of the Islamic year corresponding to the +selected date (@code{insert-yearly-islamic-diary-entry}). +@end table + +@findex insert-hebrew-diary-entry +@findex insert-monthly-hebrew-diary-entry +@findex insert-yearly-hebrew-diary-entry +@findex insert-islamic-diary-entry +@findex insert-monthly-islamic-diary-entry +@findex insert-yearly-islamic-diary-entry + These commands work much like the corresponding commands for ordinary +diary entries: they apply to the date that point is on in the calendar +window, and what they do is insert just the date portion of a diary entry +at the end of your diary file. You must then insert the rest of the +diary entry. + +@node Fancy Diary Display +@subsection Fancy Diary Display +@vindex diary-display-hook +@findex simple-diary-display + + Diary display works by preparing the diary buffer and then running the +hook @code{diary-display-hook}. The default value of this hook +(@code{simple-diary-display}) hides the irrelevant diary entries and +then displays the buffer. However, if you specify the hook as follows, + +@cindex diary buffer +@findex fancy-diary-display +@example +(add-hook 'diary-display-hook 'fancy-diary-display) +@end example + +@noindent +this enables fancy diary display. It displays diary entries and +holidays by copying them into a special buffer that exists only for the +sake of display. Copying to a separate buffer provides an opportunity +to change the displayed text to make it prettier---for example, to sort +the entries by the dates they apply to. + + As with simple diary display, you can print a hard copy of the buffer +with @code{print-diary-entries}. To print a hard copy of a day-by-day +diary for a week, position point on Sunday of that week, type +@kbd{7 d}, and then do @kbd{M-x print-diary-entries}. As usual, the +inclusion of the holidays slows down the display slightly; you can speed +things up by setting the variable @code{holidays-in-diary-buffer} to +@code{nil}. + +@vindex diary-list-include-blanks + Ordinarily, the fancy diary buffer does not show days for which there are +no diary entries, even if that day is a holiday. If you want such days to be +shown in the fancy diary buffer, set the variable +@code{diary-list-include-blanks} to @code{t}.@refill + +@cindex sorting diary entries + If you use the fancy diary display, you can use the normal hook +@code{list-diary-entries-hook} to sort each day's diary entries by their +time of day. Here's how: + +@findex sort-diary-entries +@example +(add-hook 'list-diary-entries-hook 'sort-diary-entries t) +@end example + +@noindent +For each day, this sorts diary entries that begin with a recognizable +time of day according to their times. Diary entries without times come +first within each day. + + Fancy diary display also has the ability to process included diary +files. This permits a group of people to share a diary file for events +that apply to all of them. Lines in the diary file of this form: + +@smallexample +#include "@var{filename}" +@end smallexample + +@noindent +includes the diary entries from the file @var{filename} in the fancy +diary buffer. The include mechanism is recursive, so that included files +can include other files, and so on; you must be careful not to have a +cycle of inclusions, of course. Here is how to enable the include +facility: + +@vindex list-diary-entries-hook +@vindex mark-diary-entries-hook +@findex include-other-diary-files +@findex mark-included-diary-files +@smallexample +(add-hook 'list-diary-entries-hook 'include-other-diary-files) +(add-hook 'mark-diary-entries-hook 'mark-included-diary-files) +@end smallexample + +The include mechanism works only with the fancy diary display, because +ordinary diary display shows the entries directly from your diary file. + +@node Sexp Diary Entries +@subsection Sexp Entries and the Fancy Diary Display +@cindex sexp diary entries + + Sexp diary entries allow you to do more than just have complicated +conditions under which a diary entry applies. If you use the fancy +diary display, sexp entries can generate the text of the entry depending +on the date itself. For example, an anniversary diary entry can insert +the number of years since the anniversary date into the text of the +diary entry. Thus the @samp{%d} in this diary entry: + +@findex diary-anniversary +@smallexample +%%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old) +@end smallexample + +@noindent +gets replaced by the age, so on October 31, 1990 the entry appears in +the fancy diary buffer like this: + +@smallexample +Arthur's birthday (42 years old) +@end smallexample + +@noindent +If the diary file instead contains this entry: + +@smallexample +%%(diary-anniversary 10 31 1948) Arthur's %d%s birthday +@end smallexample + +@noindent +the entry in the fancy diary buffer for October 31, 1990 appears like this: + +@smallexample +Arthur's 42nd birthday +@end smallexample + + Similarly, cyclic diary entries can interpolate the number of repetitions +that have occurred: + +@findex diary-cyclic +@smallexample +%%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time) +@end smallexample + +@noindent +looks like this: + +@smallexample +Renew medication (5th time) +@end smallexample + +@noindent +in the fancy diary display on September 8, 1990. + + There is an early reminder diary sexp that includes its entry in the +diary not only on the date of occurrence, but also on earlier dates. +For example, if you want a reminder a week before your anniversary, you +can use + +@findex diary-remind +@smallexample +%%(diary-remind '(diary-anniversary 12 22 1968) 7) Ed's anniversary +@end smallexample + +@noindent +and the fancy diary will show +@smallexample +Ed's anniversary +@end smallexample +@noindent +both on December 15 and on December 22. + +@findex diary-date + The function @code{diary-date} applies to dates described by a month, +day, year combination, each of which can be an integer, a list of +integers, or @code{t}. The value @code{t} means all values. For +example, + +@smallexample +%%(diary-date '(10 11 12) 22 t) Rake leaves +@end smallexample + +@noindent +causes the fancy diary to show + +@smallexample +Rake leaves +@end smallexample + +@noindent +on October 22, November 22, and December 22 of every year. + +@findex diary-float + The function @code{diary-float} allows you to describe diary entries +that apply to dates like the third Friday of November, or the last +Tuesday in April. The parameters are the @var{month}, @var{dayname}, +and an index @var{n}. The entry appears on the @var{n}th @var{dayname} +of @var{month}, where @var{dayname}=0 means Sunday, 1 means Monday, and +so on. If @var{n} is negative it counts backward from the end of +@var{month}. The value of @var{month} can be a list of months, a single +month, or @code{t} to specify all months. You can also use an optional +parameter @var{day} to specify the @var{n}th @var{dayname} of +@var{month} on or after/before @var{day}; the value of @var{day} defaults +to 1 if @var{n} is positive and to the last day of @var{month} if +@var{n} is negative. For example, + +@smallexample +%%(diary-float t 1 -1) Pay rent +@end smallexample + +@noindent +causes the fancy diary to show + +@smallexample +Pay rent +@end smallexample + +@noindent +on the last Monday of every month. + + The generality of sexp diary entries lets you specify any diary +entry that you can describe algorithmically. A sexp diary entry +contains an expression that computes whether the entry applies to any +given date. If its value is non-@code{nil}, the entry applies to that +date; otherwise, it does not. The expression can use the variable +@code{date} to find the date being considered; its value is a list +(@var{month} @var{day} @var{year}) that refers to the Gregorian +calendar. + + The sexp diary entry applies to a date when the expression's value +is non-@code{nil}, but some values have more specific meanings. If +the value is a string, that string is a description of the event which +occurs on that date. The value can also have the form +@code{(@var{mark} . @var{string})}; then @var{mark} specifies how to +mark the date in the calendar, and @var{string} is the description of +the event. If @var{mark} is a single-character string, that character +appears next to the date in the calendar. If @var{mark} is a face +name, the date is displayed in that face. If @var{mark} is +@code{nil}, that specifies no particular highlighting for the date. + + Suppose you get paid on the 21st of the month if it is a weekday, and +on the Friday before if the 21st is on a weekend. Here is how to write +a sexp diary entry that matches those dates: + +@smallexample +&%%(let ((dayname (calendar-day-of-week date)) + (day (car (cdr date)))) + (or (and (= day 21) (memq dayname '(1 2 3 4 5))) + (and (memq day '(19 20)) (= dayname 5))) + ) Pay check deposited +@end smallexample + + The following sexp diary entries take advantage of the ability (in the fancy +diary display) to concoct diary entries whose text varies based on the date: + +@findex diary-sunrise-sunset +@findex diary-phases-of-moon +@findex diary-day-of-year +@findex diary-iso-date +@findex diary-julian-date +@findex diary-astro-day-number +@findex diary-hebrew-date +@findex diary-islamic-date +@findex diary-french-date +@findex diary-mayan-date +@table @code +@item %%(diary-sunrise-sunset) +Make a diary entry for the local times of today's sunrise and sunset. +@item %%(diary-phases-of-moon) +Make a diary entry for the phases (quarters) of the moon. +@item %%(diary-day-of-year) +Make a diary entry with today's day number in the current year and the number +of days remaining in the current year. +@item %%(diary-iso-date) +Make a diary entry with today's equivalent ISO commercial date. +@item %%(diary-julian-date) +Make a diary entry with today's equivalent date on the Julian calendar. +@item %%(diary-astro-day-number) +Make a diary entry with today's equivalent astronomical (Julian) day number. +@item %%(diary-hebrew-date) +Make a diary entry with today's equivalent date on the Hebrew calendar. +@item %%(diary-islamic-date) +Make a diary entry with today's equivalent date on the Islamic calendar. +@item %%(diary-french-date) +Make a diary entry with today's equivalent date on the French Revolutionary +calendar. +@item %%(diary-mayan-date) +Make a diary entry with today's equivalent date on the Mayan calendar. +@end table + +@noindent +Thus including the diary entry + +@example +&%%(diary-hebrew-date) +@end example + +@noindent +causes every day's diary display to contain the equivalent date on the +Hebrew calendar, if you are using the fancy diary display. (With simple +diary display, the line @samp{&%%(diary-hebrew-date)} appears in the +diary for any date, but does nothing particularly useful.) + + These functions can be used to construct sexp diary entries based on +the Hebrew calendar in certain standard ways: + +@cindex rosh hodesh +@findex diary-rosh-hodesh +@cindex parasha, weekly +@findex diary-parasha +@cindex candle lighting times +@findex diary-sabbath-candles +@cindex omer count +@findex diary-omer +@cindex yahrzeits +@findex diary-yahrzeit +@table @code +@item %%(diary-rosh-hodesh) +Make a diary entry that tells the occurrence and ritual announcement of each +new Hebrew month. +@item %%(diary-parasha) +Make a Saturday diary entry that tells the weekly synagogue scripture reading. +@item %%(diary-sabbath-candles) +Make a Friday diary entry that tells the @emph{local time} of Sabbath +candle lighting. +@item %%(diary-omer) +Make a diary entry that gives the omer count, when appropriate. +@item %%(diary-yahrzeit @var{month} @var{day} @var{year}) @var{name} +Make a diary entry marking the anniversary of a date of death. The date +is the @emph{Gregorian} (civil) date of death. The diary entry appears +on the proper Hebrew calendar anniversary and on the day before. (In +the European style, the order of the parameters is changed to @var{day}, +@var{month}, @var{year}.) +@end table + + All the functions documented above take an optional argument +@var{mark} which specifies how to mark the date in the calendar display. +If one of these functions decides that it applies to a certain date, +it returns a value that contains @var{mark}. + +@ignore + arch-tag: 52cb299f-fd1f-4616-bfe6-91b988669431 +@end ignore diff --git a/doc/emacs/calendar.texi b/doc/emacs/calendar.texi new file mode 100644 index 00000000000..5182474622d --- /dev/null +++ b/doc/emacs/calendar.texi @@ -0,0 +1,1687 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Calendar/Diary, Gnus, Dired, Top +@chapter The Calendar and the Diary +@cindex calendar +@findex calendar + + Emacs provides the functions of a desk calendar, with a diary of +planned or past events. It also has facilities for managing your +appointments, and keeping track of how much time you spend working on +certain projects. + + To enter the calendar, type @kbd{M-x calendar}; this displays a +three-month calendar centered on the current month, with point on the +current date. With a numeric argument, as in @kbd{C-u M-x calendar}, it +prompts you for the month and year to be the center of the three-month +calendar. The calendar uses its own buffer, whose major mode is +Calendar mode. + + @kbd{Mouse-2} in the calendar brings up a menu of operations on a +particular date; @kbd{Mouse-3} brings up a menu of commonly used +calendar features that are independent of any particular date. To exit +the calendar, type @kbd{q}. + +@iftex + This chapter describes the basic calendar features. +@inforef{Advanced Calendar/Diary Usage,, emacs-xtra}, for information +about more specialized features. +@end iftex + +@menu +* Calendar Motion:: Moving through the calendar; selecting a date. +* Scroll Calendar:: Bringing earlier or later months onto the screen. +* Counting Days:: How many days are there between two dates? +* General Calendar:: Exiting or recomputing the calendar. +* Writing Calendar Files:: Writing calendars to files of various formats. +* Holidays:: Displaying dates of holidays. +* Sunrise/Sunset:: Displaying local times of sunrise and sunset. +* Lunar Phases:: Displaying phases of the moon. +* Other Calendars:: Converting dates to other calendar systems. +* Diary:: Displaying events from your diary. +* Appointments:: Reminders when it's time to do something. +* Importing Diary:: Converting diary events to/from other formats. +* Daylight Saving:: How to specify when daylight saving time is active. +* Time Intervals:: Keeping track of time intervals. +@ifnottex +* Advanced Calendar/Diary Usage:: Advanced Calendar/Diary customization. +@end ifnottex +@end menu + +@node Calendar Motion +@section Movement in the Calendar + +@cindex moving inside the calendar + Calendar mode provides commands to move through the calendar in +logical units of time such as days, weeks, months, and years. If you +move outside the three months originally displayed, the calendar +display ``scrolls'' automatically through time to make the selected +date visible. Moving to a date lets you view its holidays or diary +entries, or convert it to other calendars; moving by long time periods +is also useful simply to scroll the calendar. + +@menu +* Calendar Unit Motion:: Moving by days, weeks, months, and years. +* Move to Beginning or End:: Moving to start/end of weeks, months, and years. +* Specified Dates:: Moving to the current date or another + specific date. +@end menu + +@node Calendar Unit Motion +@subsection Motion by Standard Lengths of Time + + The commands for movement in the calendar buffer parallel the +commands for movement in text. You can move forward and backward by +days, weeks, months, and years. + +@table @kbd +@item C-f +Move point one day forward (@code{calendar-forward-day}). +@item C-b +Move point one day backward (@code{calendar-backward-day}). +@item C-n +Move point one week forward (@code{calendar-forward-week}). +@item C-p +Move point one week backward (@code{calendar-backward-week}). +@item M-@} +Move point one month forward (@code{calendar-forward-month}). +@item M-@{ +Move point one month backward (@code{calendar-backward-month}). +@item C-x ] +Move point one year forward (@code{calendar-forward-year}). +@item C-x [ +Move point one year backward (@code{calendar-backward-year}). +@end table + +@kindex C-f @r{(Calendar mode)} +@findex calendar-forward-day +@kindex C-b @r{(Calendar mode)} +@findex calendar-backward-day +@kindex C-n @r{(Calendar mode)} +@findex calendar-forward-week +@kindex C-p @r{(Calendar mode)} +@findex calendar-backward-week + The day and week commands are natural analogues of the usual Emacs +commands for moving by characters and by lines. Just as @kbd{C-n} +usually moves to the same column in the following line, in Calendar +mode it moves to the same day in the following week. And @kbd{C-p} +moves to the same day in the previous week. + + The arrow keys are equivalent to @kbd{C-f}, @kbd{C-b}, @kbd{C-n} and +@kbd{C-p}, just as they normally are in other modes. + +@kindex M-@} @r{(Calendar mode)} +@findex calendar-forward-month +@kindex M-@{ @r{(Calendar mode)} +@findex calendar-backward-month +@kindex C-x ] @r{(Calendar mode)} +@findex calendar-forward-year +@kindex C-x [ @r{(Calendar mode)} +@findex calendar-forward-year + The commands for motion by months and years work like those for +weeks, but move a larger distance. The month commands @kbd{M-@}} and +@kbd{M-@{} move forward or backward by an entire month. The year +commands @kbd{C-x ]} and @w{@kbd{C-x [}} move forward or backward a +whole year. + + The easiest way to remember these commands is to consider months and +years analogous to paragraphs and pages of text, respectively. But +the commands themselves are not quite analogous. The ordinary Emacs +paragraph commands move to the beginning or end of a paragraph, +whereas these month and year commands move by an entire month or an +entire year, keeping the same date within the month or year. + + All these commands accept a numeric argument as a repeat count. +For convenience, the digit keys and the minus sign specify numeric +arguments in Calendar mode even without the Meta modifier. For example, +@kbd{100 C-f} moves point 100 days forward from its present location. + +@node Move to Beginning or End +@subsection Beginning or End of Week, Month or Year + + A week (or month, or year) is not just a quantity of days; we think of +weeks (months, years) as starting on particular dates. So Calendar mode +provides commands to move to the beginning or end of a week, month or +year: + +@table @kbd +@kindex C-a @r{(Calendar mode)} +@findex calendar-beginning-of-week +@item C-a +Move point to start of week (@code{calendar-beginning-of-week}). +@kindex C-e @r{(Calendar mode)} +@findex calendar-end-of-week +@item C-e +Move point to end of week (@code{calendar-end-of-week}). +@kindex M-a @r{(Calendar mode)} +@findex calendar-beginning-of-month +@item M-a +Move point to start of month (@code{calendar-beginning-of-month}). +@kindex M-e @r{(Calendar mode)} +@findex calendar-end-of-month +@item M-e +Move point to end of month (@code{calendar-end-of-month}). +@kindex M-< @r{(Calendar mode)} +@findex calendar-beginning-of-year +@item M-< +Move point to start of year (@code{calendar-beginning-of-year}). +@kindex M-> @r{(Calendar mode)} +@findex calendar-end-of-year +@item M-> +Move point to end of year (@code{calendar-end-of-year}). +@end table + + These commands also take numeric arguments as repeat counts, with the +repeat count indicating how many weeks, months, or years to move +backward or forward. + +@vindex calendar-week-start-day +@cindex weeks, which day they start on +@cindex calendar, first day of week + By default, weeks begin on Sunday. To make them begin on Monday +instead, set the variable @code{calendar-week-start-day} to 1. + +@node Specified Dates +@subsection Specified Dates + + Calendar mode provides commands for moving to a particular date +specified in various ways. + +@table @kbd +@item g d +Move point to specified date (@code{calendar-goto-date}). +@item g D +Move point to specified day of year (@code{calendar-goto-day-of-year}). +@item g w +Move point to specified week of year (@code{calendar-goto-iso-week}). +@item o +Center calendar around specified month (@code{calendar-other-month}). +@item . +Move point to today's date (@code{calendar-goto-today}). +@end table + +@kindex g d @r{(Calendar mode)} +@findex calendar-goto-date + @kbd{g d} (@code{calendar-goto-date}) prompts for a year, a month, and a day +of the month, and then moves to that date. Because the calendar includes all +dates from the beginning of the current era, you must type the year in its +entirety; that is, type @samp{1990}, not @samp{90}. + +@kindex g D @r{(Calendar mode)} +@findex calendar-goto-day-of-year +@kindex g w @r{(Calendar mode)} +@findex calendar-goto-iso-week + @kbd{g D} (@code{calendar-goto-day-of-year}) prompts for a year and +day number, and moves to that date. Negative day numbers count +backward from the end of the year. @kbd{g w} +(@code{calendar-goto-iso-week}) prompts for a year and week number, +and moves to that week. + +@kindex o @r{(Calendar mode)} +@findex calendar-other-month + @kbd{o} (@code{calendar-other-month}) prompts for a month and year, +then centers the three-month calendar around that month. + +@kindex . @r{(Calendar mode)} +@findex calendar-goto-today + You can return to today's date with @kbd{.}@: +(@code{calendar-goto-today}). + +@node Scroll Calendar +@section Scrolling in the Calendar + +@cindex scrolling in the calendar + The calendar display scrolls automatically through time when you +move out of the visible portion. You can also scroll it manually. +Imagine that the calendar window contains a long strip of paper with +the months on it. Scrolling the calendar means moving the strip +horizontally, so that new months become visible in the window. + +@table @kbd +@item > +Scroll calendar one month forward (@code{scroll-calendar-left}). +@item < +Scroll calendar one month backward (@code{scroll-calendar-right}). +@item C-v +@itemx @key{NEXT} +Scroll calendar three months forward +(@code{scroll-calendar-left-three-months}). +@item M-v +@itemx @key{PRIOR} +Scroll calendar three months backward +(@code{scroll-calendar-right-three-months}). +@end table + +@kindex > @r{(Calendar mode)} +@findex scroll-calendar-left +@kindex < @r{(Calendar mode)} +@findex scroll-calendar-right + The most basic calendar scroll commands scroll by one month at a +time. This means that there are two months of overlap between the +display before the command and the display after. @kbd{>} scrolls the +calendar contents one month forward in time. @kbd{<} scrolls the +contents one month backwards in time. + +@kindex C-v @r{(Calendar mode)} +@findex scroll-calendar-left-three-months +@kindex M-v @r{(Calendar mode)} +@findex scroll-calendar-right-three-months + The commands @kbd{C-v} and @kbd{M-v} scroll the calendar by an entire +``screenful''---three months---in analogy with the usual meaning of +these commands. @kbd{C-v} makes later dates visible and @kbd{M-v} makes +earlier dates visible. These commands take a numeric argument as a +repeat count; in particular, since @kbd{C-u} multiplies the next command +by four, typing @kbd{C-u C-v} scrolls the calendar forward by a year and +typing @kbd{C-u M-v} scrolls the calendar backward by a year. + + The function keys @key{NEXT} and @key{PRIOR} are equivalent to +@kbd{C-v} and @kbd{M-v}, just as they are in other modes. + +@node Counting Days +@section Counting Days + +@table @kbd +@item M-= +Display the number of days in the current region +(@code{calendar-count-days-region}). +@end table + +@kindex M-= @r{(Calendar mode)} +@findex calendar-count-days-region + To determine the number of days in the region, type @kbd{M-=} +(@code{calendar-count-days-region}). The numbers of days shown is +@emph{inclusive}; that is, it includes the days specified by mark and +point. + +@node General Calendar +@section Miscellaneous Calendar Commands + +@table @kbd +@item p d +Display day-in-year (@code{calendar-print-day-of-year}). +@item C-c C-l +Regenerate the calendar window (@code{redraw-calendar}). +@item SPC +Scroll the next window up (@code{scroll-other-window}). +@item DEL +Scroll the next window down (@code{scroll-other-window-down}). +@item q +Exit from calendar (@code{exit-calendar}). +@end table + +@kindex p d @r{(Calendar mode)} +@cindex day of year +@findex calendar-print-day-of-year + To display the number of days elapsed since the start of the year, or +the number of days remaining in the year, type the @kbd{p d} command +(@code{calendar-print-day-of-year}). This displays both of those +numbers in the echo area. The count of days elapsed includes the +selected date. The count of days remaining does not include that +date. + +@kindex C-c C-l @r{(Calendar mode)} +@findex redraw-calendar + If the calendar window text gets corrupted, type @kbd{C-c C-l} +(@code{redraw-calendar}) to redraw it. (This can only happen if you use +non-Calendar-mode editing commands.) + +@kindex SPC @r{(Calendar mode)} + In Calendar mode, you can use @kbd{SPC} (@code{scroll-other-window}) +and @kbd{DEL} (@code{scroll-other-window-down}) to scroll the other +window up or down, respectively. This is handy when you display a list +of holidays or diary entries in another window. + +@kindex q @r{(Calendar mode)} +@findex exit-calendar + To exit from the calendar, type @kbd{q} (@code{exit-calendar}). This +buries all buffers related to the calendar, selecting other buffers. +(If a frame contains a dedicated calendar window, exiting from the +calendar iconifies that frame.) + +@node Writing Calendar Files +@section Writing Calendar Files + + These packages produce files of various formats containing calendar +and diary entries, for display purposes. + +@cindex calendar and HTML + The Calendar HTML commands produce files of HTML code that contain +calendar and diary entries. Each file applies to one month, and has a +name of the format @file{@var{yyyy}-@var{mm}.html}, where @var{yyyy} and +@var{mm} are the four-digit year and two-digit month, respectively. The +variable @code{cal-html-directory} specifies the default output +directory for the HTML files. + +@vindex cal-html-css-default + Diary entries enclosed by @code{<} and @code{>} are interpreted as +HTML tags (for example: this is a diary entry with <font +color=''red''>some red text</font>). You can change the overall +appearance of the displayed HTML pages (for example, the color of +various page elements, header styles) via a stylesheet @file{cal.css} in +the directory containing the HTML files (see the value of the variable +@code{cal-html-css-default} for relevant style settings). + +@kindex t @r{(Calendar mode)} +@table @kbd +@item H m +Generate a one-month calendar (@code{cal-html-cursor-month}). +@item H y +Generate a calendar file for each month of a year, as well as an index +page (@code{cal-html-cursor-year}). By default, this command writes +files to a @var{yyyy} subdirectory - if this is altered some hyperlinks +between years will not work. +@end table + + If the variable @code{cal-html-print-day-number-flag} is +non-@code{nil}, then the monthly calendars show the day-of-the-year +number. The variable @code{cal-html-year-index-cols} specifies the +number of columns in the yearly index page. + +@cindex calendar and La@TeX{} + The Calendar La@TeX{} commands produce a buffer of La@TeX{} code that +prints as a calendar. Depending on the command you use, the printed +calendar covers the day, week, month or year that point is in. + +@kindex t @r{(Calendar mode)} +@table @kbd +@item t m +Generate a one-month calendar (@code{cal-tex-cursor-month}). +@item t M +Generate a sideways-printing one-month calendar +(@code{cal-tex-cursor-month-landscape}). +@item t d +Generate a one-day calendar +(@code{cal-tex-cursor-day}). +@item t w 1 +Generate a one-page calendar for one week +(@code{cal-tex-cursor-week}). +@item t w 2 +Generate a two-page calendar for one week +(@code{cal-tex-cursor-week2}). +@item t w 3 +Generate an ISO-style calendar for one week +(@code{cal-tex-cursor-week-iso}). +@item t w 4 +Generate a calendar for one Monday-starting week +(@code{cal-tex-cursor-week-monday}). +@item t f w +Generate a Filofax-style two-weeks-at-a-glance calendar +(@code{cal-tex-cursor-filofax-2week}). +@item t f W +Generate a Filofax-style one-week-at-a-glance calendar +(@code{cal-tex-cursor-filofax-week}). +@item t y +Generate a calendar for one year +(@code{cal-tex-cursor-year}). +@item t Y +Generate a sideways-printing calendar for one year +(@code{cal-tex-cursor-year-landscape}). +@item t f y +Generate a Filofax-style calendar for one year +(@code{cal-tex-cursor-filofax-year}). +@end table + + Some of these commands print the calendar sideways (in ``landscape +mode''), so it can be wider than it is long. Some of them use Filofax +paper size (3.75in x 6.75in). All of these commands accept a prefix +argument which specifies how many days, weeks, months or years to print +(starting always with the selected one). + + If the variable @code{cal-tex-holidays} is non-@code{nil} (the default), +then the printed calendars show the holidays in @code{calendar-holidays}. +If the variable @code{cal-tex-diary} is non-@code{nil} (the default is +@code{nil}), diary entries are included also (in monthly, filofax, and +iso-week calendars only). If the variable @code{cal-tex-rules} is +non-@code{nil} (the default is @code{nil}), the calendar displays ruled +pages in styles that have sufficient room. Consult the documentation of +the individual cal-tex functions to see which calendars support which +features. + + You can use the variable @code{cal-tex-preamble-extra} to insert extra +La@TeX{} commands in the preamble of the generated document if you need +to. + +@node Holidays +@section Holidays +@cindex holidays + + The Emacs calendar knows about all major and many minor holidays, +and can display them. + +@table @kbd +@item h +Display holidays for the selected date +(@code{calendar-cursor-holidays}). +@item Mouse-2 Holidays +Display any holidays for the date you click on. +@item x +Mark holidays in the calendar window (@code{mark-calendar-holidays}). +@item u +Unmark calendar window (@code{calendar-unmark}). +@item a +List all holidays for the displayed three months in another window +(@code{list-calendar-holidays}). +@item M-x holidays +List all holidays for three months around today's date in another +window. +@item M-x list-holidays +List holidays in another window for a specified range of years. +@end table + +@kindex h @r{(Calendar mode)} +@findex calendar-cursor-holidays +@vindex view-calendar-holidays-initially + To see if any holidays fall on a given date, position point on that +date in the calendar window and use the @kbd{h} command. Alternatively, +click on that date with @kbd{Mouse-2} and then choose @kbd{Holidays} +from the menu that appears. Either way, this displays the holidays for +that date, in the echo area if they fit there, otherwise in a separate +window. + +@kindex x @r{(Calendar mode)} +@findex mark-calendar-holidays +@kindex u @r{(Calendar mode)} +@findex calendar-unmark +@vindex mark-holidays-in-calendar + To view the distribution of holidays for all the dates shown in the +calendar, use the @kbd{x} command. This displays the dates that are +holidays in a different face (or places a @samp{*} after these dates, if +display with multiple faces is not available). +@iftex +@inforef{Calendar Customizing, calendar-holiday-marker, emacs-xtra}. +@end iftex +@ifnottex +@xref{Calendar Customizing, calendar-holiday-marker}. +@end ifnottex + The command applies both to the currently visible months and to +other months that subsequently become visible by scrolling. To turn +marking off and erase the current marks, type @kbd{u}, which also +erases any diary marks (@pxref{Diary}). If the variable +@code{mark-holidays-in-calendar} is non-@code{nil}, creating or +updating the calendar marks holidays automatically. + +@kindex a @r{(Calendar mode)} +@findex list-calendar-holidays + To get even more detailed information, use the @kbd{a} command, which +displays a separate buffer containing a list of all holidays in the +current three-month range. You can use @key{SPC} and @key{DEL} in the +calendar window to scroll that list up and down, respectively. + +@findex holidays + The command @kbd{M-x holidays} displays the list of holidays for the +current month and the preceding and succeeding months; this works even +if you don't have a calendar window. If the variable +@code{view-calendar-holidays-initially} is non-@code{nil}, creating +the calendar displays holidays in this way. If you want the list of +holidays centered around a different month, use @kbd{C-u M-x +holidays}, which prompts for the month and year. + + The holidays known to Emacs include United States holidays and the +major Christian, Jewish, and Islamic holidays; also the solstices and +equinoxes. + +@findex list-holidays + The command @kbd{M-x list-holidays} displays the list of holidays for +a range of years. This function asks you for the starting and stopping +years, and allows you to choose all the holidays or one of several +categories of holidays. You can use this command even if you don't have +a calendar window. + + The dates used by Emacs for holidays are based on @emph{current +practice}, not historical fact. For example Veteran's Day began in +1919, but is shown in earlier years. + +@node Sunrise/Sunset +@section Times of Sunrise and Sunset +@cindex sunrise and sunset + + Special calendar commands can tell you, to within a minute or two, the +times of sunrise and sunset for any date. + +@table @kbd +@item S +Display times of sunrise and sunset for the selected date +(@code{calendar-sunrise-sunset}). +@item Mouse-2 Sunrise/sunset +Display times of sunrise and sunset for the date you click on. +@item M-x sunrise-sunset +Display times of sunrise and sunset for today's date. +@item C-u M-x sunrise-sunset +Display times of sunrise and sunset for a specified date. +@end table + +@kindex S @r{(Calendar mode)} +@findex calendar-sunrise-sunset +@findex sunrise-sunset + Within the calendar, to display the @emph{local times} of sunrise and +sunset in the echo area, move point to the date you want, and type +@kbd{S}. Alternatively, click @kbd{Mouse-2} on the date, then choose +@samp{Sunrise/sunset} from the menu that appears. The command @kbd{M-x +sunrise-sunset} is available outside the calendar to display this +information for today's date or a specified date. To specify a date +other than today, use @kbd{C-u M-x sunrise-sunset}, which prompts for +the year, month, and day. + + You can display the times of sunrise and sunset for any location and +any date with @kbd{C-u C-u M-x sunrise-sunset}. This asks you for a +longitude, latitude, number of minutes difference from Coordinated +Universal Time, and date, and then tells you the times of sunrise and +sunset for that location on that date. + + Because the times of sunrise and sunset depend on the location on +earth, you need to tell Emacs your latitude, longitude, and location +name before using these commands. Here is an example of what to set: + +@vindex calendar-location-name +@vindex calendar-longitude +@vindex calendar-latitude +@example +(setq calendar-latitude 40.1) +(setq calendar-longitude -88.2) +(setq calendar-location-name "Urbana, IL") +@end example + +@noindent +Use one decimal place in the values of @code{calendar-latitude} and +@code{calendar-longitude}. + + Your time zone also affects the local time of sunrise and sunset. +Emacs usually gets time zone information from the operating system, but +if these values are not what you want (or if the operating system does +not supply them), you must set them yourself. Here is an example: + +@vindex calendar-time-zone +@vindex calendar-standard-time-zone-name +@vindex calendar-daylight-time-zone-name +@example +(setq calendar-time-zone -360) +(setq calendar-standard-time-zone-name "CST") +(setq calendar-daylight-time-zone-name "CDT") +@end example + +@noindent +The value of @code{calendar-time-zone} is the number of minutes +difference between your local standard time and Coordinated Universal +Time (Greenwich time). The values of +@code{calendar-standard-time-zone-name} and +@code{calendar-daylight-time-zone-name} are the abbreviations used in +your time zone. Emacs displays the times of sunrise and sunset +@emph{corrected for daylight saving time}. @xref{Daylight Saving}, +for how daylight saving time is determined. + + As a user, you might find it convenient to set the calendar location +variables for your usual physical location in your @file{.emacs} file. +And when you install Emacs on a machine, you can create a +@file{default.el} file which sets them properly for the typical location +of most users of that machine. @xref{Init File}. + +@node Lunar Phases +@section Phases of the Moon +@cindex phases of the moon +@cindex moon, phases of + + These calendar commands display the dates and times of the phases of +the moon (new moon, first quarter, full moon, last quarter). This +feature is useful for debugging problems that ``depend on the phase of +the moon.'' + +@table @kbd +@item M +Display the dates and times for all the quarters of the moon for the +three-month period shown (@code{calendar-phases-of-moon}). +@item M-x phases-of-moon +Display dates and times of the quarters of the moon for three months around +today's date. +@end table + +@kindex M @r{(Calendar mode)} +@findex calendar-phases-of-moon + Within the calendar, use the @kbd{M} command to display a separate +buffer of the phases of the moon for the current three-month range. The +dates and times listed are accurate to within a few minutes. + +@findex phases-of-moon + Outside the calendar, use the command @kbd{M-x phases-of-moon} to +display the list of the phases of the moon for the current month and the +preceding and succeeding months. For information about a different +month, use @kbd{C-u M-x phases-of-moon}, which prompts for the month and +year. + + The dates and times given for the phases of the moon are given in +local time (corrected for daylight saving, when appropriate); but if +the variable @code{calendar-time-zone} is void, Coordinated Universal +Time (the Greenwich time zone) is used. @xref{Daylight Saving}. + +@node Other Calendars +@section Conversion To and From Other Calendars + +@cindex Gregorian calendar + The Emacs calendar displayed is @emph{always} the Gregorian calendar, +sometimes called the ``new style'' calendar, which is used in most of +the world today. However, this calendar did not exist before the +sixteenth century and was not widely used before the eighteenth century; +it did not fully displace the Julian calendar and gain universal +acceptance until the early twentieth century. The Emacs calendar can +display any month since January, year 1 of the current era, but the +calendar displayed is the Gregorian, even for a date at which the +Gregorian calendar did not exist. + + While Emacs cannot display other calendars, it can convert dates to +and from several other calendars. + +@menu +* Calendar Systems:: The calendars Emacs understands + (aside from Gregorian). +* To Other Calendar:: Converting the selected date to various calendars. +* From Other Calendar:: Moving to a date specified in another calendar. +* Mayan Calendar:: Moving to a date specified in a Mayan calendar. +@end menu + +@node Calendar Systems +@subsection Supported Calendar Systems + +@cindex ISO commercial calendar + The ISO commercial calendar is used largely in Europe. + +@cindex Julian calendar + The Julian calendar, named after Julius Caesar, was the one used in Europe +throughout medieval times, and in many countries up until the nineteenth +century. + +@cindex Julian day numbers +@cindex astronomical day numbers + Astronomers use a simple counting of days elapsed since noon, Monday, +January 1, 4713 B.C. on the Julian calendar. The number of days elapsed +is called the @dfn{Julian day number} or the @dfn{Astronomical day number}. + +@cindex Hebrew calendar + The Hebrew calendar is used by tradition in the Jewish religion. The +Emacs calendar program uses the Hebrew calendar to determine the dates +of Jewish holidays. Hebrew calendar dates begin and end at sunset. + +@cindex Islamic calendar + The Islamic calendar is used in many predominantly Islamic countries. +Emacs uses it to determine the dates of Islamic holidays. There is no +universal agreement in the Islamic world about the calendar; Emacs uses +a widely accepted version, but the precise dates of Islamic holidays +often depend on proclamation by religious authorities, not on +calculations. As a consequence, the actual dates of observance can vary +slightly from the dates computed by Emacs. Islamic calendar dates begin +and end at sunset. + +@cindex French Revolutionary calendar + The French Revolutionary calendar was created by the Jacobins after the 1789 +revolution, to represent a more secular and nature-based view of the annual +cycle, and to install a 10-day week in a rationalization measure similar to +the metric system. The French government officially abandoned this +calendar at the end of 1805. + +@cindex Mayan calendar + The Maya of Central America used three separate, overlapping calendar +systems, the @emph{long count}, the @emph{tzolkin}, and the @emph{haab}. +Emacs knows about all three of these calendars. Experts dispute the +exact correlation between the Mayan calendar and our calendar; Emacs uses the +Goodman-Martinez-Thompson correlation in its calculations. + +@cindex Coptic calendar +@cindex Ethiopic calendar + The Copts use a calendar based on the ancient Egyptian solar calendar. +Their calendar consists of twelve 30-day months followed by an extra +five-day period. Once every fourth year they add a leap day to this +extra period to make it six days. The Ethiopic calendar is identical in +structure, but has different year numbers and month names. + +@cindex Persian calendar + The Persians use a solar calendar based on a design of Omar Khayyam. +Their calendar consists of twelve months of which the first six have 31 +days, the next five have 30 days, and the last has 29 in ordinary years +and 30 in leap years. Leap years occur in a complicated pattern every +four or five years. +The calendar implemented here is the arithmetical Persian calendar +championed by Birashk, based on a 2,820-year cycle. It differs from +the astronomical Persian calendar, which is based on astronomical +events. As of this writing the first future discrepancy is projected +to occur on March 20, 2025. It is currently not clear what the +official calendar of Iran will be that far into the future. + +@cindex Chinese calendar + The Chinese calendar is a complicated system of lunar months arranged +into solar years. The years go in cycles of sixty, each year containing +either twelve months in an ordinary year or thirteen months in a leap +year; each month has either 29 or 30 days. Years, ordinary months, and +days are named by combining one of ten ``celestial stems'' with one of +twelve ``terrestrial branches'' for a total of sixty names that are +repeated in a cycle of sixty. + +@node To Other Calendar +@subsection Converting To Other Calendars + + The following commands describe the selected date (the date at point) +in various other calendar systems: + +@table @kbd +@item Mouse-2 Other calendars +Display the date that you click on, expressed in various other calendars. +@kindex p @r{(Calendar mode)} +@findex calendar-print-iso-date +@item p c +Display ISO commercial calendar equivalent for selected day +(@code{calendar-print-iso-date}). +@findex calendar-print-julian-date +@item p j +Display Julian date for selected day (@code{calendar-print-julian-date}). +@findex calendar-print-astro-day-number +@item p a +Display astronomical (Julian) day number for selected day +(@code{calendar-print-astro-day-number}). +@findex calendar-print-hebrew-date +@item p h +Display Hebrew date for selected day (@code{calendar-print-hebrew-date}). +@findex calendar-print-islamic-date +@item p i +Display Islamic date for selected day (@code{calendar-print-islamic-date}). +@findex calendar-print-french-date +@item p f +Display French Revolutionary date for selected day +(@code{calendar-print-french-date}). +@findex calendar-print-chinese-date +@item p C +Display Chinese date for selected day +(@code{calendar-print-chinese-date}). +@findex calendar-print-coptic-date +@item p k +Display Coptic date for selected day +(@code{calendar-print-coptic-date}). +@findex calendar-print-ethiopic-date +@item p e +Display Ethiopic date for selected day +(@code{calendar-print-ethiopic-date}). +@findex calendar-print-persian-date +@item p p +Display Persian date for selected day +(@code{calendar-print-persian-date}). +@findex calendar-print-mayan-date +@item p m +Display Mayan date for selected day (@code{calendar-print-mayan-date}). +@end table + + If you are using X, the easiest way to translate a date into other +calendars is to click on it with @kbd{Mouse-2}, then choose @kbd{Other +calendars} from the menu that appears. This displays the equivalent +forms of the date in all the calendars Emacs understands, in the form of +a menu. (Choosing an alternative from this menu doesn't actually do +anything---the menu is used only for display.) + + Otherwise, move point to the date you want to convert, then type the +appropriate command starting with @kbd{p} from the table above. The +prefix @kbd{p} is a mnemonic for ``print,'' since Emacs ``prints'' the +equivalent date in the echo area. + +@node From Other Calendar +@subsection Converting From Other Calendars + + You can use the other supported calendars to specify a date to move +to. This section describes the commands for doing this using calendars +other than Mayan; for the Mayan calendar, see the following section. + +@kindex g @var{char} @r{(Calendar mode)} +@findex calendar-goto-iso-date +@findex calendar-goto-iso-week +@findex calendar-goto-julian-date +@findex calendar-goto-astro-day-number +@findex calendar-goto-hebrew-date +@findex calendar-goto-islamic-date +@findex calendar-goto-french-date +@findex calendar-goto-chinese-date +@findex calendar-goto-persian-date +@findex calendar-goto-coptic-date +@findex calendar-goto-ethiopic-date +@table @kbd +@item g c +Move to a date specified in the ISO commercial calendar +(@code{calendar-goto-iso-date}). +@item g w +Move to a week specified in the ISO commercial calendar +(@code{calendar-goto-iso-week}). +@item g j +Move to a date specified in the Julian calendar +(@code{calendar-goto-julian-date}). +@item g a +Move to a date specified with an astronomical (Julian) day number +(@code{calendar-goto-astro-day-number}). +@item g h +Move to a date specified in the Hebrew calendar +(@code{calendar-goto-hebrew-date}). +@item g i +Move to a date specified in the Islamic calendar +(@code{calendar-goto-islamic-date}). +@item g f +Move to a date specified in the French Revolutionary calendar +(@code{calendar-goto-french-date}). +@item g C +Move to a date specified in the Chinese calendar +(@code{calendar-goto-chinese-date}). +@item g p +Move to a date specified in the Persian calendar +(@code{calendar-goto-persian-date}). +@item g k +Move to a date specified in the Coptic calendar +(@code{calendar-goto-coptic-date}). +@item g e +Move to a date specified in the Ethiopic calendar +(@code{calendar-goto-ethiopic-date}). +@end table + + These commands ask you for a date on the other calendar, move point to +the Gregorian calendar date equivalent to that date, and display the +other calendar's date in the echo area. Emacs uses strict completion +(@pxref{Completion}) whenever it asks you to type a month name, so you +don't have to worry about the spelling of Hebrew, Islamic, or French names. + +@findex list-yahrzeit-dates +@cindex yahrzeits + One common question concerning the Hebrew calendar is the computation +of the anniversary of a date of death, called a ``yahrzeit.'' The Emacs +calendar includes a facility for such calculations. If you are in the +calendar, the command @kbd{M-x list-yahrzeit-dates} asks you for a +range of years and then displays a list of the yahrzeit dates for those +years for the date given by point. If you are not in the calendar, +this command first asks you for the date of death and the range of +years, and then displays the list of yahrzeit dates. + +@node Mayan Calendar +@subsection Converting from the Mayan Calendar + + Here are the commands to select dates based on the Mayan calendar: + +@table @kbd +@item g m l +Move to a date specified by the long count calendar +(@code{calendar-goto-mayan-long-count-date}). +@item g m n t +Move to the next occurrence of a place in the +tzolkin calendar (@code{calendar-next-tzolkin-date}). +@item g m p t +Move to the previous occurrence of a place in the +tzolkin calendar (@code{calendar-previous-tzolkin-date}). +@item g m n h +Move to the next occurrence of a place in the +haab calendar (@code{calendar-next-haab-date}). +@item g m p h +Move to the previous occurrence of a place in the +haab calendar (@code{calendar-previous-haab-date}). +@item g m n c +Move to the next occurrence of a place in the +calendar round (@code{calendar-next-calendar-round-date}). +@item g m p c +Move to the previous occurrence of a place in the +calendar round (@code{calendar-previous-calendar-round-date}). +@end table + +@cindex Mayan long count + To understand these commands, you need to understand the Mayan calendars. +The @dfn{long count} is a counting of days with these units: + +@display +1 kin = 1 day@ @ @ 1 uinal = 20 kin@ @ @ 1 tun = 18 uinal +1 katun = 20 tun@ @ @ 1 baktun = 20 katun +@end display + +@kindex g m @r{(Calendar mode)} +@findex calendar-goto-mayan-long-count-date +@noindent +Thus, the long count date 12.16.11.16.6 means 12 baktun, 16 katun, 11 +tun, 16 uinal, and 6 kin. The Emacs calendar can handle Mayan long +count dates as early as 7.17.18.13.3, but no earlier. When you use the +@kbd{g m l} command, type the Mayan long count date with the baktun, +katun, tun, uinal, and kin separated by periods. + +@findex calendar-previous-tzolkin-date +@findex calendar-next-tzolkin-date +@cindex Mayan tzolkin calendar + The Mayan tzolkin calendar is a cycle of 260 days formed by a pair of +independent cycles of 13 and 20 days. Since this cycle repeats +endlessly, Emacs provides commands to move backward and forward to the +previous or next point in the cycle. Type @kbd{g m p t} to go to the +previous tzolkin date; Emacs asks you for a tzolkin date and moves point +to the previous occurrence of that date. Similarly, type @kbd{g m n t} +to go to the next occurrence of a tzolkin date. + +@findex calendar-previous-haab-date +@findex calendar-next-haab-date +@cindex Mayan haab calendar + The Mayan haab calendar is a cycle of 365 days arranged as 18 months +of 20 days each, followed a 5-day monthless period. Like the tzolkin +cycle, this cycle repeats endlessly, and there are commands to move +backward and forward to the previous or next point in the cycle. Type +@kbd{g m p h} to go to the previous haab date; Emacs asks you for a haab +date and moves point to the previous occurrence of that date. +Similarly, type @kbd{g m n h} to go to the next occurrence of a haab +date. + +@c This is omitted because it is too long for smallbook format. +@c @findex calendar-previous-calendar-round-date +@findex calendar-next-calendar-round-date +@cindex Mayan calendar round + The Maya also used the combination of the tzolkin date and the haab +date. This combination is a cycle of about 52 years called a +@emph{calendar round}. If you type @kbd{g m p c}, Emacs asks you for +both a haab and a tzolkin date and then moves point to the previous +occurrence of that combination. Use @kbd{g m n c} to move point to the +next occurrence of a combination. These commands signal an error if the +haab/tzolkin date combination you have typed is impossible. + + Emacs uses strict completion (@pxref{Strict Completion}) whenever it +asks you to type a Mayan name, so you don't have to worry about +spelling. + +@node Diary +@section The Diary +@cindex diary + + The Emacs diary keeps track of appointments or other events on a daily +basis, in conjunction with the calendar. To use the diary feature, you +must first create a @dfn{diary file} containing a list of events and +their dates. Then Emacs can automatically pick out and display the +events for today, for the immediate future, or for any specified +date. + + The name of the diary file is specified by the variable +@code{diary-file}; @file{~/diary} is the default. A sample diary file +is (note that the file format is essentially the same as that used by +the external shell utility @samp{calendar}): + +@example +12/22/1988 Twentieth wedding anniversary!! +&1/1. Happy New Year! +10/22 Ruth's birthday. +* 21, *: Payday +Tuesday--weekly meeting with grad students at 10am + Supowit, Shen, Bitner, and Kapoor to attend. +1/13/89 Friday the thirteenth!! +&thu 4pm squash game with Lloyd. +mar 16 Dad's birthday +April 15, 1989 Income tax due. +&* 15 time cards due. +@end example + +@noindent +This example uses extra spaces to align the event descriptions of most +of the entries. Such formatting is purely a matter of taste. + + Although you probably will start by creating a diary manually, Emacs +provides a number of commands to let you view, add, and change diary +entries. + +@menu +* Displaying the Diary:: Viewing diary entries and associated calendar dates. +* Format of Diary File:: Entering events in your diary. +* Date Formats:: Various ways you can specify dates. +* Adding to Diary:: Commands to create diary entries. +* Special Diary Entries:: Anniversaries, blocks of dates, cyclic entries, etc. +@end menu + +@node Displaying the Diary +@subsection Displaying the Diary + + Once you have created a diary file, you can use the calendar to view +it. You can also view today's events outside of Calendar mode. + +@table @kbd +@item d +Display all diary entries for the selected date +(@code{diary-view-entries}). +@item Mouse-2 Diary +Display all diary entries for the date you click on. +@item s +Display the entire diary file (@code{diary-show-all-entries}). +@item m +Mark all visible dates that have diary entries +(@code{mark-diary-entries}). +@item u +Unmark the calendar window (@code{calendar-unmark}). +@item M-x print-diary-entries +Print hard copy of the diary display as it appears. +@item M-x diary +Display all diary entries for today's date. +@item M-x diary-mail-entries +Mail yourself email reminders about upcoming diary entries. +@end table + +@kindex d @r{(Calendar mode)} +@findex diary-view-entries +@vindex view-diary-entries-initially + Displaying the diary entries with @kbd{d} shows in a separate window +the diary entries for the selected date in the calendar. The mode line +of the new window shows the date of the diary entries and any holidays +that fall on that date. If you specify a numeric argument with @kbd{d}, +it shows all the diary entries for that many successive days. Thus, +@kbd{2 d} displays all the entries for the selected date and for the +following day. + + Another way to display the diary entries for a date is to click +@kbd{Mouse-2} on the date, and then choose @kbd{Diary entries} from +the menu that appears. If the variable +@code{view-diary-entries-initially} is non-@code{nil}, creating the +calendar lists the diary entries for the current date (provided the +current date is visible). + +@kindex m @r{(Calendar mode)} +@findex mark-diary-entries +@vindex mark-diary-entries-in-calendar + To get a broader view of which days are mentioned in the diary, use +the @kbd{m} command. This displays the dates that have diary entries in +a different face (or places a @samp{+} after these dates, if display +with multiple faces is not available). +@iftex +@inforef{Calendar Customizing, diary-entry-marker, emacs-xtra}. +@end iftex +@ifnottex +@xref{Calendar Customizing, diary-entry-marker}. +@end ifnottex + The command applies both to the currently visible months and to +other months that subsequently become visible by scrolling. To turn +marking off and erase the current marks, type @kbd{u}, which also +turns off holiday marks (@pxref{Holidays}). If the variable +@code{mark-diary-entries-in-calendar} is non-@code{nil}, creating or +updating the calendar marks diary dates automatically. + +@kindex s @r{(Calendar mode)} +@findex diary-show-all-entries + To see the full diary file, rather than just some of the entries, use +the @kbd{s} command. + + Display of selected diary entries uses the selective display feature +to hide entries that don't apply. The diary buffer as you see it is +an illusion, so simply printing the buffer does not print what you see +on your screen. There is a special command to print hard copy of the +diary buffer @emph{as it appears}; this command is @kbd{M-x +print-diary-entries}. It sends the data directly to the printer. You +can customize it like @code{lpr-region} (@pxref{Printing}). + +@findex diary + The command @kbd{M-x diary} displays the diary entries for the current +date, independently of the calendar display, and optionally for the next +few days as well; the variable @code{number-of-diary-entries} specifies +how many days to include. +@iftex +@inforef{Diary Customizing,, emacs-xtra}. +@end iftex +@ifnottex +@xref{Diary Customizing, number-of-diary-entries}. +@end ifnottex + + If you put @code{(diary)} in your @file{.emacs} file, this +automatically displays a window with the day's diary entries, when you +enter Emacs. The mode line of the displayed window shows the date and +any holidays that fall on that date. + +@findex diary-mail-entries +@vindex diary-mail-days + Many users like to receive notice of events in their diary as email. +To send such mail to yourself, use the command @kbd{M-x +diary-mail-entries}. A prefix argument specifies how many days +(starting with today) to check; otherwise, the variable +@code{diary-mail-days} says how many days. + +@node Format of Diary File +@subsection The Diary File +@cindex diary file + +@vindex diary-file + Your @dfn{diary file} is a file that records events associated with +particular dates. The name of the diary file is specified by the +variable @code{diary-file}; @file{~/diary} is the default. The +@code{calendar} utility program supports a subset of the format allowed +by the Emacs diary facilities, so you can use that utility to view the +diary file, with reasonable results aside from the entries it cannot +understand. + + Each entry in the diary file describes one event and consists of one +or more lines. An entry always begins with a date specification at the +left margin. The rest of the entry is simply text to describe the +event. If the entry has more than one line, then the lines after the +first must begin with whitespace to indicate they continue a previous +entry. Lines that do not begin with valid dates and do not continue a +preceding entry are ignored. + + You can inhibit the marking of certain diary entries in the calendar +window; to do this, insert an ampersand (@samp{&}) at the beginning of +the entry, before the date. This has no effect on display of the entry +in the diary window; it affects only marks on dates in the calendar +window. Nonmarking entries are especially useful for generic entries +that would otherwise mark many different dates. + + If the first line of a diary entry consists only of the date or day +name with no following blanks or punctuation, then the diary window +display doesn't include that line; only the continuation lines appear. +For example, this entry: + +@example +02/11/1989 + Bill B. visits Princeton today + 2pm Cognitive Studies Committee meeting + 2:30-5:30 Liz at Lawrenceville + 4:00pm Dentist appt + 7:30pm Dinner at George's + 8:00-10:00pm concert +@end example + +@noindent +appears in the diary window without the date line at the beginning. +This style of entry looks neater when you display just a single day's +entries, but can cause confusion if you ask for more than one day's +entries. + + You can edit the diary entries as they appear in the window, but it is +important to remember that the buffer displayed contains the @emph{entire} +diary file, with portions of it concealed from view. This means, for +instance, that the @kbd{C-f} (@code{forward-char}) command can put point +at what appears to be the end of the line, but what is in reality the +middle of some concealed line. + + @emph{Be careful when editing the diary entries!} Inserting +additional lines or adding/deleting characters in the middle of a +visible line cannot cause problems, but editing at the end of a line may +not do what you expect. Deleting a line may delete other invisible +entries that follow it. Before editing the diary, it is best to display +the entire file with @kbd{s} (@code{diary-show-all-entries}). + +@node Date Formats +@subsection Date Formats + + Here are some sample diary entries, illustrating different ways of +formatting a date. The examples all show dates in American order +(month, day, year), but Calendar mode supports European order (day, +month, year) as an option. + +@example +4/20/93 Switch-over to new tabulation system +apr. 25 Start tabulating annual results +4/30 Results for April are due +*/25 Monthly cycle finishes +Friday Don't leave without backing up files +@end example + + The first entry appears only once, on April 20, 1993. The second and +third appear every year on the specified dates, and the fourth uses a +wildcard (asterisk) for the month, so it appears on the 25th of every +month. The final entry appears every week on Friday. + + You can use just numbers to express a date, as in +@samp{@var{month}/@var{day}} or @samp{@var{month}/@var{day}/@var{year}}. +This must be followed by a nondigit. In the date itself, @var{month} +and @var{day} are numbers of one or two digits. The optional @var{year} +is also a number, and may be abbreviated to the last two digits; that +is, you can use @samp{11/12/1989} or @samp{11/12/89}. + + Dates can also have the form @samp{@var{monthname} @var{day}} or +@samp{@var{monthname} @var{day}, @var{year}}, where the month's name can +be spelled in full or abbreviated (with or without a period). The +preferred abbreviations can be controlled using the variables +@code{calendar-abbrev-length}, @code{calendar-month-abbrev-array}, and +@code{calendar-day-abbrev-array}. The default is to use the first three +letters of a name as its abbreviation. Case is not significant. + + A date may be @dfn{generic}; that is, partially unspecified. Then the +entry applies to all dates that match the specification. If the date +does not contain a year, it is generic and applies to any year. +Alternatively, @var{month}, @var{day}, or @var{year} can be a @samp{*}; +this matches any month, day, or year, respectively. Thus, a diary entry +@samp{3/*/*} matches any day in March of any year; so does @samp{march +*}. + +@vindex european-calendar-style +@findex european-calendar +@findex american-calendar + If you prefer the European style of writing dates---in which the day +comes before the month---type @kbd{M-x european-calendar} while in the +calendar, or set the variable @code{european-calendar-style} to @code{t} +with @kbd{M-x customize}, or @emph{before} using any calendar or diary +command. This mode interprets all dates in the diary in the European +manner, and also uses European style for displaying diary dates. (Note +that there is no comma after the @var{monthname} in the European style.) +To go back to the (default) American style of writing dates, type +@kbd{M-x american-calendar}. + + You can use the name of a day of the week as a generic date which +applies to any date falling on that day of the week. You can abbreviate +the day of the week to three letters (with or without a period) or spell +it in full; case is not significant. + +@node Adding to Diary +@subsection Commands to Add to the Diary + + While in the calendar, there are several commands to create diary +entries: + +@table @kbd +@item i d +Add a diary entry for the selected date (@code{insert-diary-entry}). +@item i w +Add a diary entry for the selected day of the week (@code{insert-weekly-diary-entry}). +@item i m +Add a diary entry for the selected day of the month (@code{insert-monthly-diary-entry}). +@item i y +Add a diary entry for the selected day of the year (@code{insert-yearly-diary-entry}). +@end table + +@kindex i d @r{(Calendar mode)} +@findex insert-diary-entry + You can make a diary entry for a specific date by selecting that date +in the calendar window and typing the @kbd{i d} command. This command +displays the end of your diary file in another window and inserts the +date; you can then type the rest of the diary entry. + +@kindex i w @r{(Calendar mode)} +@findex insert-weekly-diary-entry +@kindex i m @r{(Calendar mode)} +@findex insert-monthly-diary-entry +@kindex i y @r{(Calendar mode)} +@findex insert-yearly-diary-entry + If you want to make a diary entry that applies to a specific day of +the week, select that day of the week (any occurrence will do) and type +@kbd{i w}. This inserts the day-of-week as a generic date; you can then +type the rest of the diary entry. You can make a monthly diary entry in +the same fashion: select the day of the month, use the @kbd{i m} +command, and type the rest of the entry. Similarly, you can insert a +yearly diary entry with the @kbd{i y} command. + + All of the above commands make marking diary entries by default. To +make a nonmarking diary entry, give a numeric argument to the command. +For example, @kbd{C-u i w} makes a nonmarking weekly diary entry. + + When you modify the diary file, be sure to save the file before +exiting Emacs. Saving the diary file after using any of the above +insertion commands will automatically update the diary marks in the +calendar window, if appropriate. You can use the command +@code{redraw-calendar} to force an update at any time. + +@node Special Diary Entries +@subsection Special Diary Entries + + In addition to entries based on calendar dates, the diary file can +contain @dfn{sexp entries} for regular events such as anniversaries. +These entries are based on Lisp expressions (sexps) that Emacs evaluates +as it scans the diary file. Instead of a date, a sexp entry contains +@samp{%%} followed by a Lisp expression which must begin and end with +parentheses. The Lisp expression determines which dates the entry +applies to. + + Calendar mode provides commands to insert certain commonly used +sexp entries: + +@table @kbd +@item i a +Add an anniversary diary entry for the selected date +(@code{insert-anniversary-diary-entry}). +@item i b +Add a block diary entry for the current region +(@code{insert-block-diary-entry}). +@item i c +Add a cyclic diary entry starting at the date +(@code{insert-cyclic-diary-entry}). +@end table + +@kindex i a @r{(Calendar mode)} +@findex insert-anniversary-diary-entry + If you want to make a diary entry that applies to the anniversary of a +specific date, move point to that date and use the @kbd{i a} command. +This displays the end of your diary file in another window and inserts +the anniversary description; you can then type the rest of the diary +entry. The entry looks like this: + +@findex diary-anniversary +@example +%%(diary-anniversary 10 31 1948) Arthur's birthday +@end example + +@noindent +This entry applies to October 31 in any year after 1948; @samp{10 31 +1948} specifies the date. (If you are using the European calendar +style, the month and day are interchanged.) The reason this expression +requires a beginning year is that advanced diary functions can use it to +calculate the number of elapsed years. + + A @dfn{block} diary entry applies to a specified range of consecutive +dates. Here is a block diary entry that applies to all dates from June +24, 1990 through July 10, 1990: + +@findex diary-block +@example +%%(diary-block 6 24 1990 7 10 1990) Vacation +@end example + +@noindent +The @samp{6 24 1990} indicates the starting date and the @samp{7 10 1990} +indicates the stopping date. (Again, if you are using the European calendar +style, the month and day are interchanged.) + +@kindex i b @r{(Calendar mode)} +@findex insert-block-diary-entry + To insert a block entry, place point and the mark on the two +dates that begin and end the range, and type @kbd{i b}. This command +displays the end of your diary file in another window and inserts the +block description; you can then type the diary entry. + +@kindex i c @r{(Calendar mode)} +@findex insert-cyclic-diary-entry + @dfn{Cyclic} diary entries repeat after a fixed interval of days. To +create one, select the starting date and use the @kbd{i c} command. The +command prompts for the length of interval, then inserts the entry, +which looks like this: + +@findex diary-cyclic +@example +%%(diary-cyclic 50 3 1 1990) Renew medication +@end example + +@noindent +This entry applies to March 1, 1990 and every 50th day following; +@samp{3 1 1990} specifies the starting date. (If you are using the +European calendar style, the month and day are interchanged.) + + All three of these commands make marking diary entries. To insert a +nonmarking entry, give a numeric argument to the command. For example, +@kbd{C-u i a} makes a nonmarking anniversary diary entry. + + Marking sexp diary entries in the calendar is @emph{extremely} +time-consuming, since every date visible in the calendar window must be +individually checked. So it's a good idea to make sexp diary entries +nonmarking (with @samp{&}) when possible. + + Another sophisticated kind of sexp entry, a @dfn{floating} diary entry, +specifies a regularly occurring event by offsets specified in days, +weeks, and months. It is comparable to a crontab entry interpreted by +the @code{cron} utility. Here is a nonmarking, floating diary entry +that applies to the last Thursday in November: + +@findex diary-float +@example +&%%(diary-float 11 4 -1) American Thanksgiving +@end example + +@noindent +The 11 specifies November (the eleventh month), the 4 specifies Thursday +(the fourth day of the week, where Sunday is numbered zero), and the +@minus{}1 specifies ``last'' (1 would mean ``first,'' 2 would mean +``second,'' @minus{}2 would mean ``second-to-last,'' and so on). The +month can be a single month or a list of months. Thus you could change +the 11 above to @samp{'(1 2 3)} and have the entry apply to the last +Thursday of January, February, and March. If the month is @code{t}, the +entry applies to all months of the year.@refill + + Each of the standard sexp diary entries takes an optional parameter +specifying the name of a face or a single-character string to use when +marking the entry in the calendar. Most generally, sexp diary entries +can perform arbitrary computations to determine when they apply. +@iftex +@inforef{Sexp Diary Entries,, emacs-xtra}. +@end iftex +@ifnottex +@inforef{Sexp Diary Entries}. +@end ifnottex + +@node Appointments +@section Appointments +@cindex appointment notification + +@vindex appt-display-format +@vindex appt-audible +@vindex appt-display-mode-line + If you have a diary entry for an appointment, and that diary entry +begins with a recognizable time of day, Emacs can warn you several +minutes beforehand that that appointment is pending. Emacs alerts you +to the appointment by displaying a message in your chosen format, as +specified by the variable @code{appt-display-format}. If the value of +@code{appt-audible} is non-@code{nil}, the warning includes an audible +reminder. In addition, if @code{appt-display-mode-line} is +non-@code{nil}, Emacs displays the number of minutes to the +appointment on the mode line. + +@vindex appt-display-duration +@vindex appt-disp-window-function +@vindex appt-delete-window-function + If @code{appt-display-format} has the value @code{window}, then the +variable @code{appt-display-duration} controls how long the reminder +window is visible for; and the variables +@code{appt-disp-window-function} and @code{appt-delete-window-function} +give the names of functions used to create and destroy the window, +respectively. + +@findex appt-activate + To enable appointment notification, use the command @kbd{M-x +appt-activate}. With a positive argument, it enables notification; +with a negative argument, it disables notification; with no argument, +it toggles. Enabling notification also sets up an appointment list +for today from the diary file, giving all diary entries found with +recognizable times of day, and reminds you just before each of them. + + For example, suppose the diary file contains these lines: + +@example +Monday + 9:30am Coffee break + 12:00pm Lunch +@end example + +@vindex appt-message-warning-time +@noindent +Then on Mondays, you will be reminded at around 9:20am about your +coffee break and at around 11:50am about lunch. The variable +@code{appt-message-warning-time} specifies how many minutes in advance +to warn you; its default value is 12 (12 minutes). + + You can write times in am/pm style (with @samp{12:00am} standing +for midnight and @samp{12:00pm} standing for noon), or 24-hour +European/military style. You need not be consistent; your diary file +can have a mixture of the two styles. Times must be at the beginning +of lines if they are to be recognized. + +@vindex appt-display-diary + Emacs updates the appointments list from the diary file +automatically just after midnight. You can force an update at any +time by re-enabling appointment notification. Both these actions also +display the day's diary buffer, unless you set +@code{appt-display-diary} to @code{nil}. The appointments list is +also updated whenever the diary file is saved. + +@findex appt-add +@findex appt-delete +@cindex alarm clock + You can also use the appointment notification facility like an alarm +clock. The command @kbd{M-x appt-add} adds entries to the appointment +list without affecting your diary file. You delete entries from the +appointment list with @kbd{M-x appt-delete}. + +@node Importing Diary +@section Importing and Exporting Diary Entries + + You can transfer diary entries between Emacs diary files and a +variety of other formats. + +@vindex diary-outlook-formats + You can import diary entries from Outlook-generated appointment +messages. While viewing such a message in Rmail or Gnus, do @kbd{M-x +diary-from-outlook} to import the entry. You can make this command +recognize additional appointment message formats by customizing the +variable @code{diary-outlook-formats}. + +@cindex iCalendar support + The icalendar package allows you to transfer data between your Emacs +diary file and iCalendar files, which are defined in ``RFC +2445---Internet Calendaring and Scheduling Core Object Specification +(iCalendar)'' (as well as the earlier vCalendar format). + + Importing works for ``ordinary'' (i.e. non-recurring) events, but +(at present) may not work correctly (if at all) for recurring events. +Exporting of diary files into iCalendar files should work correctly +for most diary entries. This feature is a work in progress, so the +commands may evolve in future. + +@findex icalendar-import-buffer + The command @code{icalendar-import-buffer} extracts +iCalendar data from the current buffer and adds it to your (default) +diary file. This function is also suitable for automatic extraction of +iCalendar data; for example with the Rmail mail client one could use: + +@example +(add-hook 'rmail-show-message-hook 'icalendar-import-buffer) +@end example + +@findex icalendar-import-file + The command @code{icalendar-import-file} imports an iCalendar file +and adds the results to an Emacs diary file. For example: + +@example +(icalendar-import-file "/here/is/calendar.ics" + "/there/goes/ical-diary") +@end example + +@noindent +You can use an @code{#include} directive to add the import file contents +to the main diary file, if these are different files. +@iftex +@inforef{Fancy Diary Display,, emacs-xtra}. +@end iftex +@ifnottex +@xref{Fancy Diary Display}. +@end ifnottex + + +@findex icalendar-export-file, icalendar-export-region + Use @code{icalendar-export-file} to interactively export an entire +Emacs diary file to iCalendar format. To export only a part of a diary +file, mark the relevant area, and call @code{icalendar-export-region}. +In both cases the result is appended to the target file. + +@node Daylight Saving +@section Daylight Saving Time +@cindex daylight saving time + + Emacs understands the difference between standard time and daylight +saving time---the times given for sunrise, sunset, solstices, +equinoxes, and the phases of the moon take that into account. The rules +for daylight saving time vary from place to place and have also varied +historically from year to year. To do the job properly, Emacs needs to +know which rules to use. + +@vindex calendar-daylight-savings-starts +@vindex calendar-daylight-savings-ends + Some operating systems keep track of the rules that apply to the place +where you are; on these systems, Emacs gets the information it needs +from the system automatically. If some or all of this information is +missing, Emacs fills in the gaps with the rules currently used in +Cambridge, Massachusetts. If the resulting rules are not what you want, +you can tell Emacs the rules to use by setting certain variables: +@code{calendar-daylight-savings-starts} and +@code{calendar-daylight-savings-ends}. + + These values should be Lisp expressions that refer to the variable +@code{year}, and evaluate to the Gregorian date on which daylight +saving time starts or (respectively) ends, in the form of a list +@code{(@var{month} @var{day} @var{year})}. The values should be +@code{nil} if your area does not use daylight saving time. + + Emacs uses these expressions to determine the starting date of +daylight saving time for the holiday list and for correcting times of +day in the solar and lunar calculations. + + The values for Cambridge, Massachusetts are as follows: + +@example +(calendar-nth-named-day 2 0 3 year) +(calendar-nth-named-day 1 0 11 year) +@end example + +@noindent +That is, the second 0th day (Sunday) of the third month (March) in +the year specified by @code{year}, and the first Sunday of the eleventh month +(November) of that year. If daylight saving time were +changed to start on October 1, you would set +@code{calendar-daylight-savings-starts} to this: + +@example +(list 10 1 year) +@end example + + If there is no daylight saving time at your location, or if you want +all times in standard time, set @code{calendar-daylight-savings-starts} +and @code{calendar-daylight-savings-ends} to @code{nil}. + +@vindex calendar-daylight-time-offset + The variable @code{calendar-daylight-time-offset} specifies the +difference between daylight saving time and standard time, measured in +minutes. The value for Cambridge, Massachusetts is 60. + +@c @vindex calendar-daylight-savings-starts-time too long! +@vindex calendar-daylight-savings-ends-time + Finally, the two variables +@code{calendar-daylight-savings-starts-time} and +@code{calendar-daylight-savings-ends-time} specify the number of +minutes after midnight local time when the transition to and from +daylight saving time should occur. For Cambridge, Massachusetts both +variables' values are 120. + +@node Time Intervals +@section Summing Time Intervals +@cindex time intervals, summing +@cindex summing time intervals +@cindex timeclock + + The timeclock feature adds up time intervals, so you can (for +instance) keep track of how much time you spend working on particular +projects. + +@findex timeclock-in +@findex timeclock-out +@findex timeclock-change +@findex timeclock-workday-remaining +@findex timeclock-when-to-leave + Use the @kbd{M-x timeclock-in} command when you start working on a +project, and @kbd{M-x timeclock-out} command when you're done. Each +time you do this, it adds one time interval to the record of the +project. You can change to working on a different project with @kbd{M-x +timeclock-change}. + + Once you've collected data from a number of time intervals, you can use +@kbd{M-x timeclock-workday-remaining} to see how much time is left to +work today (assuming a typical average of 8 hours a day), and @kbd{M-x +timeclock-when-to-leave} which will calculate when you're ``done.'' + +@vindex timeclock-modeline-display +@findex timeclock-modeline-display + If you want Emacs to display the amount of time ``left'' of your +workday in the mode line, either customize the +@code{timeclock-modeline-display} variable and set its value to +@code{t}, or invoke the @kbd{M-x timeclock-modeline-display} command. + +@vindex timeclock-ask-before-exiting + Terminating the current Emacs session might or might not mean that +you have stopped working on the project and, by default, Emacs asks +you. You can, however, set the value of the variable +@code{timeclock-ask-before-exiting} to @code{nil} (via @kbd{M-x +customize}) to avoid the question; then, only an explicit @kbd{M-x +timeclock-out} or @kbd{M-x timeclock-change} will tell Emacs that the +current interval is over. + +@cindex @file{.timelog} file +@vindex timeclock-file +@findex timeclock-reread-log + The timeclock functions work by accumulating the data in a file +called @file{.timelog} in your home directory. You can specify a +different name for this file by customizing the variable +@code{timeclock-file}. If you edit the timeclock file manually, or if +you change the value of any of timeclock's customizable variables, you +should run the command @kbd{M-x timeclock-reread-log} to update the +data in Emacs from the file. + +@ifnottex +@include cal-xtra.texi +@end ifnottex + +@ignore + arch-tag: 4531ef09-9df3-449d-9c52-2b5a4a337f92 +@end ignore diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi new file mode 100644 index 00000000000..28bad72f0bf --- /dev/null +++ b/doc/emacs/cmdargs.texi @@ -0,0 +1,1263 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2001, 2002, +@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Emacs Invocation, X Resources, GNU Free Documentation License, Top +@appendix Command Line Arguments for Emacs Invocation +@cindex command line arguments +@cindex arguments (command line) +@cindex options (command line) +@cindex switches (command line) +@cindex startup (command line arguments) +@cindex invocation (command line arguments) + + GNU Emacs supports command line arguments to request various actions +when invoking Emacs. These are for compatibility with other editors and +for sophisticated activities. We don't recommend using them for +ordinary editing. + + Arguments starting with @samp{-} are @dfn{options}, and so is +@samp{+@var{linenum}}. All other arguments specify files to visit. +Emacs visits the specified files while it starts up. The last file +name on your command line becomes the current buffer; the other files +are also visited in other buffers. If there are two files, they are +both displayed; otherwise the last file is displayed along with a +buffer list that shows what other buffers there are. As with most +programs, the special argument @samp{--} says that all subsequent +arguments are file names, not options, even if they start with +@samp{-}. + + Emacs command options can specify many things, such as the size and +position of the X window Emacs uses, its colors, and so on. A few +options support advanced usage, such as running Lisp functions on files +in batch mode. The sections of this chapter describe the available +options, arranged according to their purpose. + + There are two ways of writing options: the short forms that start with +a single @samp{-}, and the long forms that start with @samp{--}. For +example, @samp{-d} is a short form and @samp{--display} is the +corresponding long form. + + The long forms with @samp{--} are easier to remember, but longer to +type. However, you don't have to spell out the whole option name; any +unambiguous abbreviation is enough. When a long option takes an +argument, you can use either a space or an equal sign to separate the +option name and the argument. Thus, you can write either +@samp{--display sugar-bombs:0.0} or @samp{--display=sugar-bombs:0.0}. +We recommend an equal sign because it makes the relationship clearer, +and the tables below always show an equal sign. + +@cindex initial options (command line) +@cindex action options (command line) +@vindex command-line-args + Most options specify how to initialize Emacs, or set parameters for +the Emacs session. We call them @dfn{initial options}. A few options +specify things to do: for example, load libraries, call functions, or +terminate Emacs. These are called @dfn{action options}. These and file +names together are called @dfn{action arguments}. Emacs processes all +the action arguments in the order they are written. The @file{.emacs} file +can access the values of the action arguments as the elements of a list in +the variable @code{command-line-args}. + + + +@menu +* Action Arguments:: Arguments to visit files, load libraries, + and call functions. +* Initial Options:: Arguments that take effect while starting Emacs. +* Command Example:: Examples of using command line arguments. +* Resume Arguments:: Specifying arguments when you resume a running Emacs. +* Environment:: Environment variables that Emacs uses. +* Display X:: Changing the default display and using remote login. +* Font X:: Choosing a font for text, under X. +* Colors:: Choosing display colors. +* Window Size X:: Start-up window size, under X. +* Borders X:: Internal and external borders, under X. +* Title X:: Specifying the initial frame's title. +* Icons X:: Choosing what sort of icon to use, under X. +* Misc X:: Other display options. +@end menu + +@node Action Arguments +@appendixsec Action Arguments + + Here is a table of the action arguments and options: + +@table @samp +@item @var{file} +@opindex --file +@itemx --file=@var{file} +@opindex --find-file +@itemx --find-file=@var{file} +@opindex --visit +@itemx --visit=@var{file} +@cindex visiting files, command-line argument +@vindex inhibit-startup-buffer-menu +Visit @var{file} using @code{find-file}. @xref{Visiting}. +If you visit several files at startup in this way, Emacs +also displays a Buffer Menu buffer to show you what files it +has visited. You can inhibit that by setting @code{inhibit-startup-buffer-menu} to @code{t}. + +@item +@var{linenum} @var{file} +@opindex +@var{linenum} +Visit @var{file} using @code{find-file}, then go to line number +@var{linenum} in it. + +@item +@var{linenum}:@var{columnnum} @var{file} +Visit @var{file} using @code{find-file}, then go to line number +@var{linenum} and put point at column number @var{columnnum}. + +@need 3000 +@item -l @var{file} +@opindex -l +@itemx --load=@var{file} +@opindex --load +@cindex loading Lisp libraries, command-line argument +Load a Lisp library named @var{file} with the function @code{load}. +@xref{Lisp Libraries}. If @var{file} is not an absolute file name, +the library can be found either in the current directory, or in the +Emacs library search path as specified with @env{EMACSLOADPATH} +(@pxref{General Variables}). + +@strong{Warning:} If previous command-line arguments have visited +files, the current directory is the directory of the last file +visited. + +@item -L @var{dir} +@opindex -L +@itemx --directory=@var{dir} +@opindex --directory +Add directory @var{dir} to the variable @code{load-path}. + +@item -f @var{function} +@opindex -f +@itemx --funcall=@var{function} +@opindex --funcall +@cindex call Lisp functions, command-line argument +Call Lisp function @var{function}. If it is an interactive function +(a command), it reads the arguments interactively just as if you had +called the same function with a key sequence. Otherwise, it calls the +function with no arguments. + +@item --eval=@var{expression} +@opindex --eval +@itemx --execute=@var{expression} +@opindex --execute +@cindex evaluate expression, command-line argument +Evaluate Lisp expression @var{expression}. + +@item --insert=@var{file} +@opindex --insert +@cindex insert file contents, command-line argument +Insert the contents of @var{file} into the current buffer. This is like +what @kbd{M-x insert-file} does. @xref{Misc File Ops}. + +@item --kill +@opindex --kill +Exit from Emacs without asking for confirmation. + +@item --help +@opindex --help +Print a usage message listing all available options, then exit +successfully. + +@item --version +@opindex --version +Print Emacs version, then exit successfully. +@end table + +@node Initial Options +@appendixsec Initial Options + + The initial options specify parameters for the Emacs session. This +section describes the more general initial options; some other options +specifically related to the X Window System appear in the following +sections. + + Some initial options affect the loading of init files. The normal +actions of Emacs are to first load @file{site-start.el} if it exists, +then your own init file @file{~/.emacs} if it exists, and finally +@file{default.el} if it exists. @xref{Init File}. Certain options +prevent loading of some of these files or substitute other files for +them. + +@table @samp +@item -t @var{device} +@opindex -t +@itemx --terminal=@var{device} +@opindex --terminal +@cindex device for Emacs terminal I/O +Use @var{device} as the device for terminal input and output. +@samp{--terminal} implies @samp{--no-window-system}. + +@item -d @var{display} +@opindex -d +@itemx --display=@var{display} +@opindex --display +@cindex display for Emacs frame +Use the X Window System and use the display named @var{display} to open +the initial Emacs frame. @xref{Display X}, for more details. + +@item -nw +@opindex -nw +@itemx --no-window-system +@opindex --no-window-system +@cindex disable window system +Don't communicate directly with the window system, disregarding the +@env{DISPLAY} environment variable even if it is set. This means that +Emacs uses the terminal from which it was launched for all its display +and input. + +@need 3000 +@cindex batch mode +@item -batch +@opindex --batch +@itemx --batch +Run Emacs in @dfn{batch mode}. Batch mode is used for running +programs written in Emacs Lisp from shell scripts, makefiles, and so +on. You should also use the @samp{-l}, @samp{-f} or @samp{--eval} +option, to invoke a Lisp program to do batch processing. + +In batch mode, Emacs does not display the text being edited, and the +standard terminal interrupt characters such as @kbd{C-z} and @kbd{C-c} +continue to have their normal effect. The functions @code{prin1}, +@code{princ} and @code{print} output to @code{stdout} instead of the +echo area, while @code{message} and error messages output to +@code{stderr}. Functions that would normally read from the minibuffer +take their input from @code{stdin} instead. + +@samp{--batch} implies @samp{-q} (do not load an init file), but +@file{site-start.el} is loaded nonetheless. It also causes Emacs to +exit after processing all the command options. In addition, it +disables auto-saving except in buffers for which it has been +explicitly requested. + +@item --script @var{file} +@opindex --script +@cindex script mode +Run Emacs in batch mode, like @samp{--batch}, and then read and +execute the Lisp code in @var{file}. + +The normal use of this option is in executable script files that run +Emacs. They can start with this text on the first line + +@example +#!/usr/bin/emacs --script +@end example + +@noindent +which will invoke Emacs with @samp{--script} and supply the name of +the script file as @var{file}. Emacs Lisp then treats @samp{#!} as a +comment delimiter. + +@item -q +@opindex -q +@itemx --no-init-file +@opindex --no-init-file +@cindex bypassing init and @file{default.el} file +@cindex init file, not loading +@cindex @file{default.el} file, not loading +Do not load your Emacs init file @file{~/.emacs}, or @file{default.el} +either. Regardless of this switch, @file{site-start.el} is still loaded. +When invoked like this, Emacs does not allow saving options +changed with the @kbd{M-x customize} command and its variants. +@xref{Easy Customization}. + +@item --no-site-file +@opindex --no-site-file +@cindex @file{site-start.el} file, not loading +Do not load @file{site-start.el}. The options @samp{-q}, @samp{-u} +and @samp{--batch} have no effect on the loading of this file---this +option and @samp{-Q} are the only options that block it. + +@item -Q +@opindex -Q +@itemx --quick +@opindex --quick +Start emacs with minimum customizations. This is like using @samp{-q} +and @samp{--no-site-file}, but also disables the startup screen. + +@item --no-splash +@opindex --no-splash +@vindex inhibit-splash-screen +@cindex splash screen +@cindex startup message +Do not display a splash screen on startup. You can also achieve this +effect by setting the variable @code{inhibit-splash-screen} to +non-@code{nil} in you personal init file (but @emph{not} in +@file{site-start.el}). (This variable was called +@code{inhibit-startup-message} in previous Emacs versions.) + +@item --no-desktop +@opindex --no-desktop +Do not reload any saved desktop. @xref{Saving Emacs Sessions}. + +@item -u @var{user} +@opindex -u +@itemx --user=@var{user} +@opindex --user +@cindex load init file of another user +Load @var{user}'s Emacs init file @file{~@var{user}/.emacs} instead of +your own@footnote{ +This option has no effect on MS-Windows.}. + +@item --debug-init +@opindex --debug-init +@cindex errors in init file +Enable the Emacs Lisp debugger for errors in the init file. +@xref{Error Debugging,, Entering the Debugger on an Error, elisp, The +GNU Emacs Lisp Reference Manual}. + +@item --unibyte +@opindex --unibyte +@itemx --no-multibyte +@opindex --no-multibyte +@cindex unibyte operation, command-line argument +Do almost everything with single-byte buffers and strings. +All buffers and strings are unibyte unless you (or a Lisp program) +explicitly ask for a multibyte buffer or string. (Note that Emacs +always loads Lisp files in multibyte mode, even if @samp{--unibyte} is +specified; see @ref{Enabling Multibyte}.) Setting the environment +variable @env{EMACS_UNIBYTE} has the same effect +(@pxref{General Variables}). + +@item --multibyte +@opindex --multibyte +@itemx --no-unibyte +@opindex --no-unibyte +Inhibit the effect of @env{EMACS_UNIBYTE}, so that Emacs +uses multibyte characters by default, as usual. +@end table + +@node Command Example +@appendixsec Command Argument Example + + Here is an example of using Emacs with arguments and options. It +assumes you have a Lisp program file called @file{hack-c.el} which, when +loaded, performs some useful operation on the current buffer, expected +to be a C program. + +@example +emacs --batch foo.c -l hack-c -f save-buffer >& log +@end example + +@noindent +This says to visit @file{foo.c}, load @file{hack-c.el} (which makes +changes in the visited file), save @file{foo.c} (note that +@code{save-buffer} is the function that @kbd{C-x C-s} is bound to), and +then exit back to the shell (because of @samp{--batch}). @samp{--batch} +also guarantees there will be no problem redirecting output to +@file{log}, because Emacs will not assume that it has a display terminal +to work with. + +@node Resume Arguments +@appendixsec Resuming Emacs with Arguments + + You can specify action arguments for Emacs when you resume it after +a suspension. To prepare for this, put the following code in your +@file{.emacs} file (@pxref{Hooks}): + +@c `resume-suspend-hook' is correct. It is the name of a function. +@example +(add-hook 'suspend-hook 'resume-suspend-hook) +(add-hook 'suspend-resume-hook 'resume-process-args) +@end example + + As further preparation, you must execute the shell script +@file{emacs.csh} (if you use csh as your shell) or @file{emacs.bash} +(if you use bash as your shell). These scripts define an alias named +@code{edit}, which will resume Emacs giving it new command line +arguments such as files to visit. The scripts are found in the +@file{etc} subdirectory of the Emacs distribution. + + Only action arguments work properly when you resume Emacs. Initial +arguments are not recognized---it's too late to execute them anyway. + + Note that resuming Emacs (with or without arguments) must be done from +within the shell that is the parent of the Emacs job. This is why +@code{edit} is an alias rather than a program or a shell script. It is +not possible to implement a resumption command that could be run from +other subjobs of the shell; there is no way to define a command that could +be made the value of @env{EDITOR}, for example. Therefore, this feature +does not take the place of the Emacs Server feature (@pxref{Emacs +Server}). + + The aliases use the Emacs Server feature if you appear to have a +server Emacs running. However, they cannot determine this with complete +accuracy. They may think that a server is still running when in +actuality you have killed that Emacs, because the file +@file{/tmp/esrv@dots{}} still exists. If this happens, find that +file and delete it. + +@node Environment +@appendixsec Environment Variables +@cindex environment variables + + The @dfn{environment} is a feature of the operating system; it +consists of a collection of variables with names and values. Each +variable is called an @dfn{environment variable}; environment variable +names are case-sensitive, and it is conventional to use upper case +letters only. The values are all text strings. + + What makes the environment useful is that subprocesses inherit the +environment automatically from their parent process. This means you +can set up an environment variable in your login shell, and all the +programs you run (including Emacs) will automatically see it. +Subprocesses of Emacs (such as shells, compilers, and version-control +software) inherit the environment from Emacs, too. + +@findex setenv +@findex getenv + Inside Emacs, the command @kbd{M-x getenv} gets the value of an +environment variable. @kbd{M-x setenv} sets a variable in the Emacs +environment. (Environment variable substitutions with @samp{$} work +in the value just as in file names; see @ref{File Names with $}.) + + The way to set environment variables outside of Emacs depends on the +operating system, and especially the shell that you are using. For +example, here's how to set the environment variable @env{ORGANIZATION} +to @samp{not very much} using Bash: + +@example +export ORGANIZATION="not very much" +@end example + +@noindent +and here's how to do it in csh or tcsh: + +@example +setenv ORGANIZATION "not very much" +@end example + + When Emacs is using the X Window System, various environment +variables that control X work for Emacs as well. See the X +documentation for more information. + +@menu +* General Variables:: Environment variables that all versions of Emacs use. +* Misc Variables:: Certain system-specific variables. +* MS-Windows Registry:: An alternative to the environment on MS-Windows. +@end menu + +@node General Variables +@appendixsubsec General Variables + + Here is an alphabetical list of specific environment variables that +have special meanings in Emacs, giving the name of each variable and +its meaning. Most of these variables are also used by some other +programs. Emacs does not require any of these environment variables +to be set, but it uses their values if they are set. + +@table @env +@item CDPATH +Used by the @code{cd} command to search for the directory you specify, +when you specify a relative directory name. +@item EMACS_UNIBYTE +@cindex unibyte operation, environment variable +Defining this environment variable with a nonempty value directs Emacs +to do almost everything with single-byte buffers and strings. It is +equivalent to using the @samp{--unibyte} command-line option on each +invocation. @xref{Initial Options}. +@item EMACSDATA +Directory for the architecture-independent files that come with Emacs. +This is used to initialize the Lisp variable @code{data-directory}. +@item EMACSDOC +Directory for the documentation string file, +@file{DOC-@var{emacsversion}}. This is used to initialize the Lisp +variable @code{doc-directory}. +@item EMACSLOADPATH +A colon-separated list of directories@footnote{ +Here and below, whenever we say ``colon-separated list of directories,'' +it pertains to Unix and GNU/Linux systems. On MS-DOS and MS-Windows, +the directories are separated by semi-colons instead, since DOS/Windows +file names might include a colon after a drive letter.} +to search for Emacs Lisp files---used to initialize @code{load-path}. +@item EMACSPATH +A colon-separated list of directories to search for executable +files---used to initialize @code{exec-path}. +@item EMAIL +@vindex user-mail-address@r{, initialization} +Your email address; used to initialize the Lisp variable +@code{user-mail-address}, which the Emacs mail interface puts into +the @samp{From} header of outgoing messages (@pxref{Mail Headers}). +@item ESHELL +Used for shell-mode to override the @env{SHELL} environment variable. +@item HISTFILE +The name of the file that shell commands are saved in between logins. +This variable defaults to @file{~/.bash_history} if you use Bash, to +@file{~/.sh_history} if you use ksh, and to @file{~/.history} +otherwise. +@item HOME +The location of your files in the directory tree; used for +expansion of file names starting with a tilde (@file{~}). On MS-DOS, +it defaults to the directory from which Emacs was started, with +@samp{/bin} removed from the end if it was present. On Windows, the +default value of @env{HOME} is the @file{Application Data} +subdirectory of the user profile directory (normally, this is +@file{C:/Documents and Settings/@var{username}/Application Data}, +where @var{username} is your user name), though for backwards +compatibility @file{C:/} will be used instead if a @file{.emacs} file +is found there. +@item HOSTNAME +The name of the machine that Emacs is running on. +@item INCPATH +A colon-separated list of directories. Used by the @code{complete} package +to search for files. +@item INFOPATH +A colon-separated list of directories in which to search for Info files. +@item LC_ALL +@itemx LC_COLLATE +@itemx LC_CTYPE +@itemx LC_MESSAGES +@itemx LC_MONETARY +@itemx LC_NUMERIC +@itemx LC_TIME +@itemx LANG +The user's preferred locale. The locale has six categories, specified +by the environment variables @env{LC_COLLATE} for sorting, +@env{LC_CTYPE} for character encoding, @env{LC_MESSAGES} for system +messages, @env{LC_MONETARY} for monetary formats, @env{LC_NUMERIC} for +numbers, and @env{LC_TIME} for dates and times. If one of these +variables is not set, the category defaults to the value of the +@env{LANG} environment variable, or to the default @samp{C} locale if +@env{LANG} is not set. But if @env{LC_ALL} is specified, it overrides +the settings of all the other locale environment variables. + +On MS-Windows, if @env{LANG} is not already set in the environment +when Emacs starts, Emacs sets it based on the system-wide default +language, which you can set in the @samp{Regional Settings} Control Panel +on some versions of MS-Windows. + +The value of the @env{LC_CTYPE} category is +matched against entries in @code{locale-language-names}, +@code{locale-charset-language-names}, and +@code{locale-preferred-coding-systems}, to select a default language +environment and coding system. @xref{Language Environments}. +@item LOGNAME +The user's login name. See also @env{USER}. +@item MAIL +The name of your system mail inbox. +@item MH +Name of setup file for the mh system. (The default is @file{~/.mh_profile}.) +@item NAME +Your real-world name. +@item NNTPSERVER +The name of the news server. Used by the mh and Gnus packages. +@item ORGANIZATION +The name of the organization to which you belong. Used for setting the +`Organization:' header in your posts from the Gnus package. +@item PATH +A colon-separated list of directories in which executables reside. This +is used to initialize the Emacs Lisp variable @code{exec-path}. +@item PWD +If set, this should be the default directory when Emacs was started. +@item REPLYTO +If set, this specifies an initial value for the variable +@code{mail-default-reply-to}. @xref{Mail Headers}. +@item SAVEDIR +The name of a directory in which news articles are saved by default. +Used by the Gnus package. +@item SHELL +The name of an interpreter used to parse and execute programs run from +inside Emacs. +@item SMTPSERVER +The name of the outgoing mail server. Used by the SMTP library +(@pxref{Top,,,smtpmail,Sending mail via SMTP}). +@cindex background mode, on @command{xterm} +@item TERM +The type of the terminal that Emacs is using. This variable must be +set unless Emacs is run in batch mode. On MS-DOS, it defaults to +@samp{internal}, which specifies a built-in terminal emulation that +handles the machine's own display. If the value of @env{TERM} indicates +that Emacs runs in non-windowed mode from @command{xterm} or a similar +terminal emulator, the background mode defaults to @samp{light}, and +Emacs will choose colors that are appropriate for a light background. +@item TERMCAP +The name of the termcap library file describing how to program the +terminal specified by the @env{TERM} variable. This defaults to +@file{/etc/termcap}. +@item TMPDIR +Used by the Emerge package as a prefix for temporary files. +@item TZ +This specifies the current time zone and possibly also daylight +saving time information. On MS-DOS, if @env{TZ} is not set in the +environment when Emacs starts, Emacs defines a default value as +appropriate for the country code returned by DOS. On MS-Windows, Emacs +does not use @env{TZ} at all. +@item USER +The user's login name. See also @env{LOGNAME}. On MS-DOS, this +defaults to @samp{root}. +@item VERSION_CONTROL +Used to initialize the @code{version-control} variable (@pxref{Numbered Backups}). +@end table + +@node Misc Variables +@appendixsubsec Miscellaneous Variables + +These variables are used only on particular configurations: + +@table @env +@item COMSPEC +On MS-DOS and MS-Windows, the name of the command interpreter to use +when invoking batch files and commands internal to the shell. On MS-DOS +this is also used to make a default value for the @env{SHELL} environment +variable. + +@item NAME +On MS-DOS, this variable defaults to the value of the @env{USER} +variable. + +@item TEMP +@itemx TMP +On MS-DOS and MS-Windows, these specify the name of the directory for +storing temporary files in. + +@item EMACSTEST +On MS-DOS, this specifies a file to use to log the operation of the +internal terminal emulator. This feature is useful for submitting bug +reports. + +@item EMACSCOLORS +On MS-DOS, this specifies the screen colors. It is useful to set them +this way, since otherwise Emacs would display the default colors +momentarily when it starts up. + +The value of this variable should be the two-character encoding of the +foreground (the first character) and the background (the second +character) colors of the default face. Each character should be the +hexadecimal code for the desired color on a standard PC text-mode +display. For example, to get blue text on a light gray background, +specify @samp{EMACSCOLORS=17}, since 1 is the code of the blue color and +7 is the code of the light gray color. + +The PC display usually supports only eight background colors. However, +Emacs switches the DOS display to a mode where all 16 colors can be used +for the background, so all four bits of the background color are +actually used. + +@item WINDOW_GFX +Used when initializing the Sun windows system. + +@item PRELOAD_WINSOCK +On MS-Windows, if you set this variable, Emacs will load and initialize +the network library at startup, instead of waiting until the first +time it is required. + +@item emacs_dir +On MS-Windows, @env{emacs_dir} is a special environment variable, which +indicates the full path of the directory in which Emacs is installed. +If Emacs is installed in the standard directory structure, it +calculates this value automatically. It is not much use setting this +variable yourself unless your installation is non-standard, since +unlike other environment variables, it will be overridden by Emacs at +startup. When setting other environment variables, such as +@env{EMACSLOADPATH}, you may find it useful to use @env{emacs_dir} +rather than hard-coding an absolute path. This allows multiple +versions of Emacs to share the same environment variable settings, and +it allows you to move the Emacs installation directory, without +changing any environment or registry settings. +@end table + +@node MS-Windows Registry +@appendixsubsec The MS-Windows System Registry +@pindex addpm, MS-Windows installation program +@cindex registry, setting environment variables and resources on MS-Windows + +Under MS-Windows, the installation program @command{addpm.exe} adds +values for @env{emacs_dir}, @env{EMACSLOADPATH}, @env{EMACSDATA}, +@env{EMACSPATH}, @env{EMACSDOC}, @env{SHELL} and @env{TERM} to the +@file{HKEY_LOCAL_MACHINE} section of the system registry, under +@file{/Software/GNU/Emacs}. It does this because there is no standard +place to set environment variables across different versions of +Windows. Running @command{addpm.exe} is no longer strictly necessary +in recent versions of Emacs, but if you are upgrading from an older +version, running @command{addpm.exe} ensures that you do not have +older registry entries from a previous installation, which may not be +compatible with the latest version of Emacs. + +When Emacs starts, as well as checking the environment, it also checks +the System Registry for those variables and for @env{HOME}, @env{LANG} +and @env{PRELOAD_WINSOCK}. + +To determine the value of those variables, Emacs goes through the +following procedure. First, the environment is checked. If the +variable is not found there, Emacs looks for registry keys by that +name under @file{/Software/GNU/Emacs}; first in the +@file{HKEY_CURRENT_USER} section of the registry, and if not found +there, in the @file{HKEY_LOCAL_MACHINE} section. Finally, if Emacs +still cannot determine the values, compiled-in defaults are used. + +In addition to the environment variables above, you can also add many +of the settings which on X belong in the @file{.Xdefaults} file +(@pxref{X Resources}) to the @file{/Software/GNU/Emacs} registry key. +Settings you add to the @file{HKEY_LOCAL_MACHINE} section will affect +all users of the machine. Settings you add to the +@file{HKEY_CURRENT_USER} section will only affect you, and will +override machine wide settings. + +@node Display X +@appendixsec Specifying the Display Name +@cindex display name (X Window System) +@cindex @env{DISPLAY} environment variable + + The environment variable @env{DISPLAY} tells all X clients, including +Emacs, where to display their windows. Its value is set by default +in ordinary circumstances, when you start an X server and run jobs +locally. Occasionally you may need to specify the display yourself; for +example, if you do a remote login and want to run a client program +remotely, displaying on your local screen. + + With Emacs, the main reason people change the default display is to +let them log into another system, run Emacs on that system, but have the +window displayed at their local terminal. You might need to log in +to another system because the files you want to edit are there, or +because the Emacs executable file you want to run is there. + + The syntax of the @env{DISPLAY} environment variable is +@samp{@var{host}:@var{display}.@var{screen}}, where @var{host} is the +host name of the X Window System server machine, @var{display} is an +arbitrarily-assigned number that distinguishes your server (X terminal) +from other servers on the same machine, and @var{screen} is a +rarely-used field that allows an X server to control multiple terminal +screens. The period and the @var{screen} field are optional. If +included, @var{screen} is usually zero. + + For example, if your host is named @samp{glasperle} and your server is +the first (or perhaps the only) server listed in the configuration, your +@env{DISPLAY} is @samp{glasperle:0.0}. + + You can specify the display name explicitly when you run Emacs, either +by changing the @env{DISPLAY} variable, or with the option @samp{-d +@var{display}} or @samp{--display=@var{display}}. Here is an example: + +@smallexample +emacs --display=glasperle:0 & +@end smallexample + + You can inhibit the direct use of the window system and GUI with the +@samp{-nw} option. It tells Emacs to display using ordinary @acronym{ASCII} on +its controlling terminal. This is also an initial option. + + Sometimes, security arrangements prevent a program on a remote system +from displaying on your local system. In this case, trying to run Emacs +produces messages like this: + +@smallexample +Xlib: connection to "glasperle:0.0" refused by server +@end smallexample + +@noindent +You might be able to overcome this problem by using the @command{xhost} +command on the local system to give permission for access from your +remote machine. + +@node Font X +@appendixsec Font Specification Options +@cindex font name (X Window System) + + By default, Emacs displays text in a twelve point Courier font (when +using X). You can specify a different font on your command line +through the option @samp{-fn @var{name}} (or @samp{--font}, which is +an alias for @samp{-fn}). + +@table @samp +@item -fn @var{name} +@opindex -fn +@itemx --font=@var{name} +@opindex --font +@cindex specify default font from the command line +Use font @var{name} as the default font. +@end table + + Under X, each font has a long name which consists of fourteen words +or numbers, separated by dashes. Some fonts also have shorter +nicknames. For instance, @samp{9x15} is such a nickname. This font +makes each character nine pixels wide and fifteen pixels high. You +can use either kind of name. Case is insignificant in both kinds. +You can use wildcard patterns for the font name; then Emacs lets X +choose one of the fonts that match the pattern. The wildcard +character @samp{*} matches any sequence of characters (including none) +and @samp{?} matches any single character. However, matching is +implementation-dependent, and can be inaccurate when wildcards match +dashes in a long name. For reliable results, supply all 14 dashes and +use wildcards only within a field. Here is an example, which happens +to specify the font whose nickname is @samp{6x13}: + +@smallexample +emacs -fn \ + "-misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1" & +@end smallexample + +@noindent +You can also specify the font in your @file{.Xdefaults} file: + +@smallexample +emacs.font: -misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1 +@end smallexample + + Note that if you use a wildcard pattern on the command line, you +need to enclose it in single or double quotes, to prevent the shell +from accidentally expanding it into a list of file names. On the +other hand, you should not quote the name in the @file{.Xdefaults} +file. + +The default font used by Emacs (under X) is: + +@smallexample +-adobe-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1 +@end smallexample + + A long font name has the following form: + +@smallexample +-@var{maker}-@var{family}-@var{weight}-@var{slant}-@var{widthtype}-@var{style}@dots{} +@dots{}-@var{pixels}-@var{height}-@var{horiz}-@var{vert}-@var{spacing}-@var{width}-@var{registry}-@var{encoding} +@end smallexample + +@table @var +@item maker +This is the name of the font manufacturer. +@item family +This is the name of the font family---for example, @samp{courier}. +@item weight +This is normally @samp{bold}, @samp{medium} or @samp{light}. Other +words may appear here in some font names. +@item slant +This is @samp{r} (roman), @samp{i} (italic), @samp{o} (oblique), +@samp{ri} (reverse italic), or @samp{ot} (other). +@item widthtype +This is normally @samp{condensed}, @samp{extended}, @samp{semicondensed} +or @samp{normal}. Other words may appear here in some font names. +@item style +This is an optional additional style name. Usually it is empty---most +long font names have two hyphens in a row at this point. +@item pixels +This is the font height, in pixels. +@item height +This is the font height on the screen, measured in tenths of a printer's +point---approximately 1/720 of an inch. In other words, it is the point +size of the font, times ten. For a given vertical resolution, +@var{height} and @var{pixels} are proportional; therefore, it is common +to specify just one of them and use @samp{*} for the other. +@item horiz +This is the horizontal resolution, in pixels per inch, of the screen for +which the font is intended. +@item vert +This is the vertical resolution, in pixels per inch, of the screen for +which the font is intended. Normally the resolution of the fonts on +your system is the right value for your screen; therefore, you normally +specify @samp{*} for this and @var{horiz}. +@item spacing +This is @samp{m} (monospace), @samp{p} (proportional) or @samp{c} +(character cell). +@item width +This is the average character width, in pixels, multiplied by ten. +@item registry +@itemx encoding +These together make up the X font character set that the font depicts. +(X font character sets are not the same as Emacs charsets, but they +are solutions for the same problem.) You can use the +@command{xfontsel} program to check which choices you have. However, +normally you should use @samp{iso8859} for @var{registry} and @samp{1} +for @var{encoding}. +@end table + +@cindex listing system fonts + You will probably want to use a fixed-width default font---that is, +a font in which all characters have the same width. Any font with +@samp{m} or @samp{c} in the @var{spacing} field of the long name is a +fixed-width font. Here's how to use the @command{xlsfonts} program to +list all the fixed-width fonts available on your system: + +@example +xlsfonts -fn '*x*' | egrep "^[0-9]+x[0-9]+" +xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-m*' +xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-c*' +@end example + +@noindent +To see what a particular font looks like, use the @command{xfd} command. +For example: + +@example +xfd -fn 6x13 +@end example + +@noindent +displays the entire font @samp{6x13}. + + While running Emacs, you can set the font of the current frame +(@pxref{Frame Parameters}) or for a specific kind of text +(@pxref{Faces}). + +@node Colors +@appendixsec Window Color Options +@cindex color of window, from command line +@cindex text colors, from command line + +@findex list-colors-display +@cindex available colors + On a color display, you can specify which color to use for various +parts of the Emacs display. To find out what colors are available on +your system, type @kbd{M-x list-colors-display}, or press +@kbd{C-Mouse-2} and select @samp{Display Colors} from the pop-up menu. +(A particular window system might support many more colors, but the +list displayed by @code{list-colors-display} shows their portable +subset that can be safely used on any display supported by Emacs.) +If you do not specify colors, on windowed displays the default for the +background is white and the default for all other colors is black. On a +monochrome display, the foreground is black, the background is white, +and the border is gray if the display supports that. On terminals, the +background is usually black and the foreground is white. + + Here is a list of the command-line options for specifying colors: + +@table @samp +@item -fg @var{color} +@opindex -fg +@itemx --foreground-color=@var{color} +@opindex --foreground-color +@cindex foreground color, command-line argument +Specify the foreground color. @var{color} should be a standard color +name, or a numeric specification of the color's red, green, and blue +components as in @samp{#4682B4} or @samp{RGB:46/82/B4}. +@item -bg @var{color} +@opindex -bg +@itemx --background-color=@var{color} +@opindex --background-color +@cindex background color, command-line argument +Specify the background color. +@item -bd @var{color} +@opindex -bd +@itemx --border-color=@var{color} +@opindex --border-color +@cindex border color, command-line argument +Specify the color of the border of the X window. +@item -cr @var{color} +@opindex -cr +@itemx --cursor-color=@var{color} +@opindex --cursor-color +@cindex cursor color, command-line argument +Specify the color of the Emacs cursor which indicates where point is. +@item -ms @var{color} +@opindex -ms +@itemx --mouse-color=@var{color} +@opindex --mouse-color +@cindex mouse pointer color, command-line argument +Specify the color for the mouse cursor when the mouse is in the Emacs window. +@item -r +@opindex -r +@itemx -rv +@opindex -rv +@itemx --reverse-video +@opindex --reverse-video +@cindex reverse video, command-line argument +Reverse video---swap the foreground and background colors. +@item --color=@var{mode} +@opindex --color +@cindex standard colors on a character terminal +@cindex override character terminal color support +For a character terminal only, specify the mode of color support. +This option is intended for overriding the number of supported colors +that the character terminal advertises in its @code{termcap} or +@code{terminfo} database. The parameter @var{mode} can be one of the +following: +@table @samp +@item never +@itemx no +Don't use colors even if the terminal's capabilities specify color +support. +@item default +@itemx auto +Same as when @option{--color} is not used at all: Emacs detects at +startup whether the terminal supports colors, and if it does, turns on +colored display. +@item always +@itemx yes +@itemx ansi8 +Turn on the color support unconditionally, and use color commands +specified by the ANSI escape sequences for the 8 standard colors. +@item @var{num} +Use color mode for @var{num} colors. If @var{num} is -1, turn off +color support (equivalent to @samp{never}); if it is 0, use the +default color support for this terminal (equivalent to @samp{auto}); +otherwise use an appropriate standard mode for @var{num} colors. +Depending on your terminal's capabilities, Emacs might be able to turn +on a color mode for 8, 16, 88, or 256 as the value of @var{num}. If +there is no mode that supports @var{num} colors, Emacs acts as if +@var{num} were 0, i.e.@: it uses the terminal's default color support +mode. +@end table +If @var{mode} is omitted, it defaults to @var{ansi8}. +@end table + + For example, to use a coral mouse cursor and a slate blue text cursor, +enter: + +@example +emacs -ms coral -cr 'slate blue' & +@end example + + You can reverse the foreground and background colors through the +@samp{-rv} option or with the X resource @samp{reverseVideo}. + + The @samp{-fg}, @samp{-bg}, and @samp{-rv} options function on +text-only terminals as well as on graphical displays. + +@node Window Size X +@appendixsec Options for Window Size and Position +@cindex geometry of Emacs window +@cindex position and size of Emacs frame +@cindex width and height of Emacs frame +@cindex specifying fullscreen for Emacs frame + + Here is a list of the command-line options for specifying size and +position of the initial Emacs frame: + +@table @samp +@item -g @var{width}x@var{height}@r{[@{}+-@r{@}}@var{xoffset}@r{@{}+-@r{@}}@var{yoffset}@r{]]} +@opindex -g +@itemx --geometry=@var{width}x@var{height}@r{[@{}+-@r{@}}@var{xoffset}@r{@{}+-@r{@}}@var{yoffset}@r{]]} +@opindex --geometry +@cindex geometry, command-line argument +Specify the size @var{width} and @var{height} (measured in character +columns and lines), and positions @var{xoffset} and @var{yoffset} +(measured in pixels). The @var{width} and @var{height} parameters +apply to all frames, whereas @var{xoffset} and @var{yoffset} only to +the initial frame. + +@item -fs +@opindex -fs +@itemx --fullscreen +@opindex --fullscreen +@cindex fullscreen, command-line argument +Specify that width and height shall be the size of the screen. + +@item -fh +@opindex -fh +@itemx --fullheight +@opindex --fullheight +@cindex fullheight, command-line argument +Specify that the height shall be the height of the screen. + +@item -fw +@opindex -fw +@itemx --fullwidth +@opindex --fullwidth +@cindex fullwidth, command-line argument +Specify that the width shall be the width of the screen. +@end table + + +@noindent +In the @samp{--geometry} option, @code{@r{@{}+-@r{@}}} means either a plus + sign or a minus sign. A plus +sign before @var{xoffset} means it is the distance from the left side of +the screen; a minus sign means it counts from the right side. A plus +sign before @var{yoffset} means it is the distance from the top of the +screen, and a minus sign there indicates the distance from the bottom. +The values @var{xoffset} and @var{yoffset} may themselves be positive or +negative, but that doesn't change their meaning, only their direction. + + Emacs uses the same units as @command{xterm} does to interpret the geometry. +The @var{width} and @var{height} are measured in characters, so a large font +creates a larger frame than a small font. (If you specify a proportional +font, Emacs uses its maximum bounds width as the width unit.) The +@var{xoffset} and @var{yoffset} are measured in pixels. + + You do not have to specify all of the fields in the geometry +specification. If you omit both @var{xoffset} and @var{yoffset}, the +window manager decides where to put the Emacs frame, possibly by +letting you place it with the mouse. For example, @samp{164x55} +specifies a window 164 columns wide, enough for two ordinary width +windows side by side, and 55 lines tall. + + The default width for Emacs is 80 characters and the default height is +40 lines. You can omit either the width or the height or both. If +you start the geometry with an integer, Emacs interprets it as the +width. If you start with an @samp{x} followed by an integer, Emacs +interprets it as the height. Thus, @samp{81} specifies just the width; +@samp{x45} specifies just the height. + + If you start with @samp{+} or @samp{-}, that introduces an offset, +which means both sizes are omitted. Thus, @samp{-3} specifies the +@var{xoffset} only. (If you give just one offset, it is always +@var{xoffset}.) @samp{+3-3} specifies both the @var{xoffset} and the +@var{yoffset}, placing the frame near the bottom left of the screen. + + You can specify a default for any or all of the fields in +@file{.Xdefaults} file, and then override selected fields with a +@samp{--geometry} option. + + Since the mode line and the echo area occupy the last 2 lines of the +frame, the height of the initial text window is 2 less than the height +specified in your geometry. In non-X-toolkit versions of Emacs, the +menu bar also takes one line of the specified number. But in the X +toolkit version, the menu bar is additional and does not count against +the specified height. The tool bar, if present, is also additional. + + Enabling or disabling the menu bar or tool bar alters the amount of +space available for ordinary text. Therefore, if Emacs starts up with +a tool bar (which is the default), and handles the geometry +specification assuming there is a tool bar, and then your +@file{~/.emacs} file disables the tool bar, you will end up with a +frame geometry different from what you asked for. To get the intended +size with no tool bar, use an X resource to specify ``no tool bar'' +(@pxref{Table of Resources}); then Emacs will already know there's no +tool bar when it processes the specified geometry. + + When using one of @samp{--fullscreen}, @samp{--fullwidth} or +@samp{--fullheight} there may be some space around the frame +anyway. That is because Emacs rounds the sizes so they are an +even number of character heights and widths. + + Some window managers have options that can make them ignore both +program-specified and user-specified positions (sawfish is one). +If these are set, Emacs fails to position the window correctly. + +@node Borders X +@appendixsec Internal and External Borders +@cindex borders (X Window System) + + An Emacs frame has an internal border and an external border. The +internal border is an extra strip of the background color around the +text portion of the frame. Emacs itself draws the internal border. +The external border is added by the window manager outside the frame; +depending on the window manager you use, it may contain various boxes +you can click on to move or iconify the window. + +@table @samp +@item -ib @var{width} +@opindex -ib +@itemx --internal-border=@var{width} +@opindex --internal-border +@cindex internal border width, command-line argument +Specify @var{width} as the width of the internal border (between the text +and the main border), in pixels. + +@item -bw @var{width} +@opindex -bw +@itemx --border-width=@var{width} +@opindex --border-width +@cindex main border width, command-line argument +Specify @var{width} as the width of the main border, in pixels. +@end table + + When you specify the size of the frame, that does not count the +borders. The frame's position is measured from the outside edge of the +external border. + + Use the @samp{-ib @var{n}} option to specify an internal border +@var{n} pixels wide. The default is 1. Use @samp{-bw @var{n}} to +specify the width of the external border (though the window manager may +not pay attention to what you specify). The default width of the +external border is 2. + +@node Title X +@appendixsec Frame Titles + + An Emacs frame may or may not have a specified title. The frame +title, if specified, appears in window decorations and icons as the +name of the frame. If an Emacs frame has no specified title, the +default title has the form @samp{@var{invocation-name}@@@var{machine}} +(if there is only one frame) or the selected window's buffer name (if +there is more than one frame). + + You can specify a title for the initial Emacs frame with a command +line option: + +@table @samp +@item -T @var{title} +@opindex -T +@itemx --title=@var{title} +@opindex --title +@cindex frame title, command-line argument +Specify @var{title} as the title for the initial Emacs frame. +@end table + + The @samp{--name} option (@pxref{Resources}) also specifies the title +for the initial Emacs frame. + +@node Icons X +@appendixsec Icons +@cindex icons (X Window System) + + Most window managers allow you to ``iconify'' a frame, removing +it from sight, and leaving a small, distinctive ``icon'' window in its +place. Clicking on the icon window makes the frame itself appear again. +If you have many clients running at once, you can avoid cluttering up +the screen by iconifying most of the clients. + +@table @samp +@item -nbi +@opindex -nbi +@itemx --no-bitmap-icon +@opindex --no-bitmap-icon +@cindex Emacs icon, a gnu +Do not use a picture of a gnu as the Emacs icon. + +@item -iconic +@opindex --iconic +@itemx --iconic +@cindex start iconified, command-line argument +Start Emacs in iconified state. +@end table + + By default Emacs uses an icon window containing a picture of the GNU gnu. +The @samp{-nbi} or @samp{--no-bitmap-icon} option tells Emacs to let the +window manager choose what sort of icon to use---usually just a small +rectangle containing the frame's title. + + The @samp{-iconic} option tells Emacs to begin running as an icon, +rather than showing a frame right away. In this situation, the icon +is the only indication that Emacs has started; the text frame doesn't +appear until you deiconify it. + +@node Misc X +@appendixsec Other Display Options + +@table @samp +@item -hb +@opindex -hb +@itemx --horizontal-scroll-bars +@opindex --horizontal-scroll-bars +@c @cindex horizontal scroll bars, command-line argument +Enable horizontal scroll bars. Since horizontal scroll bars +are not yet implemented, this actually does nothing. + +@item -vb +@opindex -vb +@itemx --vertical-scroll-bars +@opindex --vertical-scroll-bars +@cindex vertical scroll bars, command-line argument +Enable vertical scroll bars. + +@item -lsp @var{pixels} +@opindex -lsp +@itemx --line-spacing=@var{pixels} +@opindex --line-spacing +@cindex line spacing, command-line argument +Specify @var{pixels} as additional space to put between lines, in pixels. + +@item -nbc +@opindex -nbc +@itemx --no-blinking-cursor +@opindex --no-blinking-cursor +@cindex blinking cursor disable, command-line argument +Disable the blinking cursor on graphical displays. + +@item -D +@opindex -D +@itemx --basic-display +@opindex --basic-display +Disable the menu-bar, the tool-bar, the scroll-bars, and tool tips, +and turn off the blinking cursor. This can be useful for making a +test case that simplifies debugging of display problems. +@end table + + The @samp{--xrm} option (@pxref{Resources}) specifies additional +X resource values. + +@ignore + arch-tag: fffecd9e-7329-4a51-a3cc-dd4a9889340e +@end ignore diff --git a/doc/emacs/commands.texi b/doc/emacs/commands.texi new file mode 100644 index 00000000000..d2daffe00bb --- /dev/null +++ b/doc/emacs/commands.texi @@ -0,0 +1,294 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2001, 2002, +@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@iftex +@chapter Characters, Keys and Commands + + This chapter explains the character sets used by Emacs for input +commands and for the contents of files, and the fundamental concepts of +@dfn{keys} and @dfn{commands}, whereby Emacs interprets your keyboard +and mouse input. +@end iftex + +@ifnottex +@raisesections +@end ifnottex + +@node User Input, Keys, Screen, Top +@section Kinds of User Input +@cindex input with the keyboard +@cindex keyboard input +@cindex character set (keyboard) +@cindex @acronym{ASCII} +@cindex C- +@cindex Control +@cindex control characters + + GNU Emacs is designed for use with keyboard commands because that is +the most efficient way to edit. You can do editing with the mouse, as +in other editors, and you can give commands with the menu bar and tool +bar, and scroll with the scroll bar. But if you keep on editing that +way, you won't get the benefits of Emacs. Therefore, this manual +documents primarily how to edit with the keyboard. You can force +yourself to practice using the keyboard by using the shell command +@samp{emacs -nw} to start Emacs, so that the mouse won't work. + + Emacs uses an extension of the @acronym{ASCII} character set for +keyboard input; it also accepts non-character input events including +function keys and mouse button actions. + + @acronym{ASCII} consists of 128 character codes. Some of these codes are +assigned graphic symbols such as @samp{a} and @samp{=}; the rest are +control characters, such as @kbd{Control-a} (usually written @kbd{C-a} +for short). @kbd{C-a} gets its name from the fact that you type it by +holding down the @key{CTRL} key while pressing @kbd{a}. + + Some @acronym{ASCII} control characters have special names, and most +terminals have special keys you can type them with: for example, +@key{RET}, @key{TAB}, @key{DEL} and @key{ESC}. The space character is +usually known as @key{SPC}, even though strictly speaking it is a +graphic character that is blank. + + Emacs extends the @acronym{ASCII} character set with thousands more printing +characters (@pxref{International}), additional control characters, and a +few more modifiers that can be combined with any character. + + On @acronym{ASCII} terminals, there are only 32 possible control characters. +These are the control variants of letters and @samp{@@[]\^_}. In +addition, the shift key is meaningless with control characters: +@kbd{C-a} and @kbd{C-A} are the same character, and Emacs cannot +distinguish them. + + The Emacs character set has room for control variants of all +printing characters, and distinguishes @kbd{C-A} from @kbd{C-a}. +Graphical terminals make it possible to enter all these characters. +For example, @kbd{C--} (that's Control-Minus) and @kbd{C-5} are +meaningful Emacs commands on a graphical terminal. + + Another Emacs character-set extension is additional modifier bits. +Only one modifier bit is commonly used; it is called Meta. Every +character has a Meta variant; examples include @kbd{Meta-a} (normally +written @kbd{M-a}, for short), @kbd{M-A} (different from @kbd{M-a}, +but they are normally equivalent in Emacs), @kbd{M-@key{RET}}, and +@kbd{M-C-a}. That last means @kbd{a} with both the @key{CTRL} and +@key{META} modifiers. We usually write it as @kbd{C-M-a} rather than +@kbd{M-C-a}, for reasons of tradition. + +@cindex Meta +@cindex M- +@cindex @key{ESC} replacing @key{META} key + Some terminals have a @key{META} key, and allow you to type Meta +characters by holding this key down. Thus, you can type @kbd{Meta-a} +by holding down @key{META} and pressing @kbd{a}. The @key{META} key +works much like the @key{SHIFT} key. In fact, this key is more often +labeled @key{ALT} or @key{EDIT}, instead of @key{META}; on a Sun +keyboard, it may have a diamond on it. + + If there is no @key{META} key, you can still type Meta characters +using two-character sequences starting with @key{ESC}. Thus, you can +enter @kbd{M-a} by typing @kbd{@key{ESC} a}. You can enter +@kbd{C-M-a} by typing @kbd{@key{ESC} C-a}. Unlike @key{META}, which +modifies other characters, @key{ESC} is a separate character. You +don't hold down @key{ESC} while typing the next character; instead, +you press it and release it, then you enter the next character. +@key{ESC} is allowed on terminals with @key{META} keys, too, in case +you have formed a habit of using it. + + Emacs defines several other modifier keys that can be applied to any +input character. These are called @key{SUPER}, @key{HYPER} and +@key{ALT}. We write @samp{s-}, @samp{H-} and @samp{A-} to say that a +character uses these modifiers. Thus, @kbd{s-H-C-x} is short for +@kbd{Super-Hyper-Control-x}. Not all graphical terminals actually +provide keys for these modifier flags---in fact, many terminals have a +key labeled @key{ALT} which is really a @key{META} key. The standard +key bindings of Emacs do not include any characters with these +modifiers. But you can assign them meanings of your own by +customizing Emacs. + + If your keyboard lacks one of these modifier keys, you can enter it +using @kbd{C-x @@}: @kbd{C-x @@ h} adds the ``hyper'' flag to the next +character, @kbd{C-x @@ s} adds the ``super'' flag, and @kbd{C-x @@ a} +adds the ``alt'' flag. For instance, @kbd{C-x @@ h C-a} is a way to +enter @kbd{Hyper-Control-a}. (Unfortunately there is no way to add +two modifiers by using @kbd{C-x @@} twice for the same character, +because the first one goes to work on the @kbd{C-x}.) + + Keyboard input includes keyboard keys that are not characters at +all, such as function keys and arrow keys. Mouse buttons are also not +characters. However, you can modify these events with the modifier +keys @key{CTRL}, @key{META}, @key{SUPER}, @key{HYPER} and @key{ALT}, +just like keyboard characters. + +@cindex input event + Input characters and non-character inputs are collectively called +@dfn{input events}. @xref{Input Events,,, elisp, The Emacs Lisp +Reference Manual}, for the full Lisp-level details. If you are not +doing Lisp programming, but simply want to redefine the meaning of +some characters or non-character events, see @ref{Customization}. + + @acronym{ASCII} terminals cannot really send anything to the computer except +@acronym{ASCII} characters. These terminals use a sequence of characters to +represent each function key. But that is invisible to the Emacs user, +because the keyboard input routines catch these special sequences +and convert them to function key events before any other part of Emacs +gets to see them. + +@cindex keys stolen by window manager +@cindex window manager, keys stolen by + On graphical displays, the window manager is likely to block the +character @kbd{Meta-@key{TAB}} before Emacs can see it. It may also +block @kbd{Meta-@key{SPC}}, @kbd{C-M-d} and @kbd{C-M-l}. If you have +these problems, we recommend that you customize your window manager to +turn off those commands, or put them on key combinations that Emacs +does not use. + +@node Keys, Commands, User Input, Top +@section Keys + +@cindex key sequence +@cindex key + A @dfn{key sequence} (@dfn{key}, for short) is a sequence of input +events that is meaningful as a unit---a ``single command.'' Some +Emacs command sequences are invoked by just one character or one +event; for example, just @kbd{C-f} moves forward one character in the +buffer. But Emacs also has commands that take two or more events to +invoke. + +@cindex complete key +@cindex prefix key + If a sequence of events is enough to invoke a command, it is a +@dfn{complete key}. Examples of complete keys include @kbd{C-a}, +@kbd{X}, @key{RET}, @key{NEXT} (a function key), @key{DOWN} (an arrow +key), @kbd{C-x C-f}, and @kbd{C-x 4 C-f}. If it isn't long enough to be +complete, we call it a @dfn{prefix key}. The above examples show that +@kbd{C-x} and @kbd{C-x 4} are prefix keys. Every key sequence is either +a complete key or a prefix key. + + Most single characters constitute complete keys in the standard Emacs +command bindings. A few of them are prefix keys. A prefix key combines +with the following input event to make a longer key sequence, which may +itself be complete or a prefix. For example, @kbd{C-x} is a prefix key, +so @kbd{C-x} and the next input event combine to make a two-event +key sequence. Most of these key sequences are complete keys, including +@kbd{C-x C-f} and @kbd{C-x b}. A few, such as @kbd{C-x 4} and @kbd{C-x +r}, are themselves prefix keys that lead to three-event key +sequences. There's no limit to the length of a key sequence, but in +practice people rarely use sequences longer than four events. + + You can't add input events onto a complete key. For example, the +two-event sequence @kbd{C-f C-k} is not a key, because the @kbd{C-f} +is a complete key in itself. It's impossible to give @kbd{C-f C-k} an +independent meaning as a command. @kbd{C-f C-k} is two key sequences, +not one.@refill + + All told, the prefix keys in Emacs are @kbd{C-c}, @kbd{C-h}, +@kbd{C-x}, @kbd{C-x @key{RET}}, @kbd{C-x @@}, @kbd{C-x a}, @kbd{C-x +n}, @w{@kbd{C-x r}}, @kbd{C-x v}, @kbd{C-x 4}, @kbd{C-x 5}, @kbd{C-x +6}, @key{ESC}, @kbd{M-g}, and @kbd{M-o}. (@key{F1} and @key{F2} are +aliases for @kbd{C-h} and @kbd{C-x 6}.) This list is not cast in stone; +it describes the standard key bindings. If you customize Emacs, you can make +new prefix keys, or eliminate some of the standard ones (not +recommended for most users). @xref{Key Bindings}. + + If you make or eliminate prefix keys, that changes the set of +possible key sequences. For example, if you redefine @kbd{C-f} as a +prefix, @kbd{C-f C-k} automatically becomes a key (complete, unless +you define that too as a prefix). Conversely, if you remove the +prefix definition of @kbd{C-x 4}, then @kbd{C-x 4 f} and @kbd{C-x 4 +@var{anything}} are no longer keys. + + Typing the help character (@kbd{C-h} or @key{F1}) after a prefix key +displays a list of the commands starting with that prefix. There are +a few prefix keys after which @kbd{C-h} does not work---for historical +reasons, they define other meanings for @kbd{C-h} which are painful to +change. @key{F1} works after all prefix keys. + +@node Commands, Text Characters, Keys, Top +@section Keys and Commands + +@cindex binding +@cindex command +@cindex function definition + This manual is full of passages that tell you what particular keys +do. But Emacs does not assign meanings to keys directly. Instead, +Emacs assigns meanings to named @dfn{commands}, and then gives keys +their meanings by @dfn{binding} them to commands. + + Every command has a name chosen by a programmer. The name is +usually made of a few English words separated by dashes; for example, +@code{next-line} or @code{forward-word}. A command also has a +@dfn{function definition} which is a Lisp program; this is how the +command does its work. In Emacs Lisp, a command is a Lisp function with +special options to read arguments and for interactive use. For more +information on commands and functions, see @ref{What Is a Function,, +What Is a Function, elisp, The Emacs Lisp Reference Manual}. (The +definition here is simplified slightly.) + + The bindings between keys and commands are recorded in tables called +@dfn{keymaps}. @xref{Keymaps}. + + When we say that ``@kbd{C-n} moves down vertically one line'' we are +glossing over a subtle distinction that is irrelevant in ordinary use, +but vital for Emacs customization. The command @code{next-line} does +a vertical move downward. @kbd{C-n} has this effect @emph{because} it +is bound to @code{next-line}. If you rebind @kbd{C-n} to the command +@code{forward-word}, @kbd{C-n} will move forward one word instead. +Rebinding keys is an important method of customization. + + In the rest of this manual, we usually ignore this distinction to +keep things simple. We will often speak of keys like @kbd{C-n} as +commands, even though strictly speaking the key is bound to a command. +Usually we state the name of the command which really does the work in +parentheses after mentioning the key that runs it. For example, we +will say that ``The command @kbd{C-n} (@code{next-line}) moves point +vertically down,'' meaning that the command @code{next-line} moves +vertically down, and the key @kbd{C-n} is normally bound to it. + + Since we are discussing customization, we should tell you about +@dfn{variables}. Often the description of a command will say, ``To +change this, set the variable @code{mumble-foo}.'' A variable is a +name used to store a value. Most of the variables documented in this +manual are meant for customization: some command or other part of +Emacs examines the variable and behaves differently according to the +value that you set. You can ignore the information about variables +until you are interested in customizing them. Then read the basic +information on variables (@pxref{Variables}) and the information about +specific variables will make sense. + +@node Text Characters, Entering Emacs, Commands, Top +@section Character Set for Text +@cindex characters (in text) + + Text in Emacs buffers is a sequence of characters. In the simplest +case, these are @acronym{ASCII} characters, each stored in one 8-bit +byte. Both @acronym{ASCII} control characters (octal codes 000 +through 037, and 0177) and @acronym{ASCII} printing characters (codes +040 through 0176) are allowed. The other modifier flags used in +keyboard input, such as Meta, are not allowed in buffers. + + Non-@acronym{ASCII} printing characters can also appear in buffers, +when multibyte characters are enabled. They have character codes +starting at 256, octal 0400, and each one is represented as a sequence +of two or more bytes. @xref{International}. Single-byte characters +with codes 128 through 255 can also appear in multibyte buffers. +However, non-@acronym{ASCII} control characters cannot appear in a +buffer. + + Some @acronym{ASCII} control characters serve special purposes in text, and have +special names. For example, the newline character (octal code 012) is +used in the buffer to end a line, and the tab character (octal code 011) +is used for indenting to the next tab stop column (normally every 8 +columns). @xref{Text Display}. + + If you disable multibyte characters, then you can use only one +alphabet of non-@acronym{ASCII} characters, which all fit in one byte. +They use octal codes 0200 through 0377. @xref{Unibyte Mode}. + +@ifnottex +@lowersections +@end ifnottex + +@ignore + arch-tag: 9be43eef-d1f4-4d03-a916-c741ea713a45 +@end ignore diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi new file mode 100644 index 00000000000..d496ab84b19 --- /dev/null +++ b/doc/emacs/custom.texi @@ -0,0 +1,2515 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Customization, Quitting, Amusements, Top +@chapter Customization +@cindex customization + + This chapter talks about various topics relevant to adapting the +behavior of Emacs in ways we have anticipated. +@iftex +See @cite{The Emacs Lisp Reference Manual} +@end iftex +@ifnottex +@xref{Top, Emacs Lisp, Emacs Lisp, elisp, The Emacs Lisp +Reference Manual}, +@end ifnottex +for how to make more far-reaching and open-ended changes. @xref{X +Resources}, for information on using X resources to customize Emacs. + + Customization that you do within Emacs normally affects only the +particular Emacs session that you do it in---it does not persist +between sessions unless you save the customization in a file such as +your init file (@file{.emacs}) that will affect future sessions. +(@xref{Init File}.) When you tell the customization buffer to save +customizations for future sessions, this actually works by editing +@file{.emacs} for you. + + Another means of customization is the keyboard macro, which is a +sequence of keystrokes to be replayed with a single command. +@xref{Keyboard Macros}, for full instruction how to record, manage, and +replay sequences of keys. + +@menu +* Minor Modes:: Each minor mode is one feature you can turn on + independently of any others. +* Easy Customization:: Convenient way to browse and change settings. +* Variables:: Many Emacs commands examine Emacs variables + to decide what to do; by setting variables, + you can control their functioning. +* Key Bindings:: The keymaps say what command each key runs. + By changing them, you can "redefine keys". +* Syntax:: The syntax table controls how words and + expressions are parsed. +* Init File:: How to write common customizations in the + @file{.emacs} file. +@end menu + +@node Minor Modes +@section Minor Modes +@cindex minor modes +@cindex mode, minor + + Minor modes are optional features which you can turn on or off. For +example, Auto Fill mode is a minor mode in which @key{SPC} breaks lines +between words as you type. All the minor modes are independent of each +other and of the selected major mode. Most minor modes say in the mode +line when they are enabled; for example, @samp{Fill} in the mode line means +that Auto Fill mode is enabled. + + You should append @code{-mode} to the name of a minor mode to +produce the name of the command that turns the mode on or off. Thus, +the command to enable or disable Auto Fill mode is called +@code{auto-fill-mode}. These commands are usually invoked with +@kbd{M-x}, but you can bind keys to them if you wish. + + With no argument, the minor mode function turns the mode on if it +was off, and off if it was on. This is known as @dfn{toggling}. A +positive argument always turns the mode on, and an explicit zero +argument or a negative argument always turns it off. + + Some minor modes are global: while enabled, they affect everything +you do in the Emacs session, in all buffers. Other minor modes are +buffer-local; they apply only to the current buffer, so you can enable +the mode in certain buffers and not others. + + For most minor modes, the command name is also the name of a +variable. The variable's value is non-@code{nil} if the mode is +enabled and @code{nil} if it is disabled. Some minor-mode commands +work by just setting the variable. For example, the command +@code{abbrev-mode} works by setting the value of @code{abbrev-mode} as +a variable; it is this variable that directly turns Abbrev mode on and +off. You can directly set the variable's value instead of calling the +mode function. For other minor modes, you need to either set the +variable through the Customize interface or call the mode function to +correctly enable or disable the mode. To check which of these two +possibilities applies to a given minor mode, use @kbd{C-h v} to ask +for documentation on the variable name. + + For minor mode commands that work by just setting the minor mode +variable, that variable provides a good way for Lisp programs to turn +minor modes on and off; it is also useful in a file's local variables +list (@pxref{File Variables}). But please think twice before setting +minor modes with a local variables list, because most minor modes are +a matter of user preference---other users editing the same file might +not want the same minor modes you prefer. + + The most useful buffer-local minor modes include Abbrev mode, Auto +Fill mode, Auto Save mode, Font-Lock mode, Glasses mode, Outline minor +mode, Overwrite mode, and Binary Overwrite mode. + + Abbrev mode allows you to define abbreviations that automatically expand +as you type them. For example, @samp{amd} might expand to @samp{abbrev +mode}. @xref{Abbrevs}, for full information. + + Auto Fill mode allows you to enter filled text without breaking lines +explicitly. Emacs inserts newlines as necessary to prevent lines from +becoming too long. @xref{Filling}. + + Auto Save mode saves the buffer contents periodically to reduce the +amount of work you can lose in case of a crash. @xref{Auto Save}. + + Enriched mode enables editing and saving of formatted text. +@xref{Formatted Text}. + + Flyspell mode automatically highlights misspelled words. +@xref{Spelling}. + + Font-Lock mode automatically highlights certain textual units found +in programs, such as comments, strings, and function names being +defined. This requires a display that can show multiple fonts or +colors. @xref{Faces}. + +@ignore + ISO Accents mode makes the characters @samp{`}, @samp{'}, @samp{"}, +@samp{^}, @samp{/} and @samp{~} combine with the following letter, to +produce an accented letter in the ISO Latin-1 character set. The +newer and more general feature of input methods more or less +supersedes ISO Accents mode. @xref{Unibyte Mode}. +@end ignore + + Outline minor mode provides the same facilities as the major mode +called Outline mode; but since it is a minor mode instead, you can +combine it with any major mode. @xref{Outline Mode}. + +@cindex Overwrite mode +@cindex mode, Overwrite + Overwrite mode causes ordinary printing characters to replace existing +text instead of shoving it to the right. For example, if point is in +front of the @samp{B} in @samp{FOOBAR}, then in Overwrite mode typing a +@kbd{G} changes it to @samp{FOOGAR}, instead of producing @samp{FOOGBAR} +as usual. In Overwrite mode, the command @kbd{C-q} inserts the next +character whatever it may be, even if it is a digit---this gives you a +way to insert a character instead of replacing an existing character. + +@findex overwrite-mode +@kindex INSERT + The command @code{overwrite-mode} is an exception to the rule that +commands which toggle minor modes are normally not bound to keys: it is +bound to the @key{INSERT} function key. This is because many other +programs bind @key{INSERT} to similar functions. + +@findex binary-overwrite-mode + Binary Overwrite mode is a variant of Overwrite mode for editing +binary files; it treats newlines and tabs like other characters, so that +they overwrite other characters and can be overwritten by them. +In Binary Overwrite mode, digits after @kbd{C-q} specify an +octal character code, as usual. + + Here are some useful minor modes that normally apply to all buffers +at once. Since Line Number mode and Transient Mark mode can be +enabled or disabled just by setting the value of the minor mode +variable, you @emph{can} set them differently for particular buffers, +by explicitly making the corresponding variable local in those +buffers. @xref{Locals}. + + Icomplete mode displays an indication of available completions when +you are in the minibuffer and completion is active. @xref{Completion +Options}. + + Line Number mode enables continuous display in the mode line of the +line number of point, and Column Number mode enables display of the +column number. @xref{Mode Line}. + + Scroll Bar mode gives each window a scroll bar (@pxref{Scroll Bars}). +Menu Bar mode gives each frame a menu bar (@pxref{Menu Bars}). Both of +these modes are enabled by default when you use the X Window System. + + In Transient Mark mode, every change in the buffer contents +``deactivates'' the mark, so that commands that operate on the region +will get an error. This means you must either set the mark, or +explicitly ``reactivate'' it, before each command that uses the region. +The advantage of Transient Mark mode is that Emacs can display the +region highlighted. @xref{Mark}. + +@node Easy Customization +@section Easy Customization Interface + +@cindex settings + Emacs has many @dfn{settings} which have values that you can specify +in order to customize various commands. Many are documented in this +manual. Most settings are @dfn{user options}---that is to say, Lisp +variables (@pxref{Variables})---so their names appear in the Variable +Index (@pxref{Variable Index}). The other settings are faces and +their attributes (@pxref{Faces}). + +@findex customize +@cindex customization buffer + You can browse interactively through settings and change them using +@kbd{M-x customize}. This command creates a @dfn{customization +buffer}, which offers commands to navigate through a logically +organized structure of the Emacs settings; you can also use it to edit +and set their values, and to save settings permanently in your +@file{~/.emacs} file (@pxref{Init File}). + + The appearance of the example buffers in this section is typically +different under a graphical display, since faces are then used to indicate +buttons, links and editable fields. + +@menu +* Groups: Customization Groups. How settings are classified in a structure. +* Browsing: Browsing Custom. Browsing and searching for settings. +* Changing a Variable:: How to edit an option's value and set the option. +* Saving Customizations:: Specifying the file for saving customizations. +* Face Customization:: How to edit the attributes of a face. +* Specific Customization:: Making a customization buffer for specific + variables, faces, or groups. +* Custom Themes:: How to define collections of customized options + that can be loaded and unloaded together. +@end menu + +@node Customization Groups +@subsection Customization Groups +@cindex customization groups + + For customization purposes, settings are organized into @dfn{groups} +to help you find them. Groups are collected into bigger groups, all +the way up to a master group called @code{Emacs}. + + @kbd{M-x customize} creates a customization buffer that shows the +top-level @code{Emacs} group and the second-level groups immediately +under it. It looks like this, in part: + +@c we want the buffer example to all be on one page, but unfortunately +@c that's quite a bit of text, so force all space to the bottom. +@page +@smallexample +@group +/- Emacs group: ---------------------------------------------------\ + [State]: visible group members are all at standard values. + Customization of the One True Editor. + See also [Manual]. + +Editing group: [Go to Group] +Basic text editing facilities. + +External group: [Go to Group] +Interfacing to external utilities. + +@var{more second-level groups} + +\- Emacs group end ------------------------------------------------/ +@end group +@end smallexample + +@noindent +This says that the buffer displays the contents of the @code{Emacs} +group. The other groups are listed because they are its contents. But +they are listed differently, without indentation and dashes, because +@emph{their} contents are not included. Each group has a single-line +documentation string; the @code{Emacs} group also has a @samp{[State]} +line. + +@cindex editable fields (customization buffer) +@cindex buttons (customization buffer) +@cindex links (customization buffer) + Most of the text in the customization buffer is read-only, but it +typically includes some @dfn{editable fields} that you can edit. +There are also @dfn{buttons} and @dfn{links}, which do something when +you @dfn{invoke} them. To invoke a button or a link, either click on +it with @kbd{Mouse-1}, or move point to it and type @key{RET}. + + For example, the phrase @samp{[State]} that appears in +a second-level group is a button. It operates on the same +customization buffer. The phrase @samp{[Go to Group]} is a kind +of hypertext link to another group. Invoking it creates a new +customization buffer, which shows that group and its contents. + + The @code{Emacs} group includes a few settings, but mainly it +contains other groups, which contain more groups, which contain the +settings. By browsing the hierarchy of groups, you will eventually +find the feature you are interested in customizing. Then you can use +the customization buffer to set that feature's settings. You can also +go straight to a particular group by name, using the command @kbd{M-x +customize-group}. + +@node Browsing Custom +@subsection Browsing and Searching for Options and Faces +@findex customize-browse + + @kbd{M-x customize-browse} is another way to browse the available +settings. This command creates a special customization buffer which +shows only the names of groups and settings, and puts them in a +structure. + + In this buffer, you can show the contents of a group by invoking the +@samp{[+]} button. When the group contents are visible, this button +changes to @samp{[-]}; invoking that hides the group contents again. + + Each group or setting in this buffer has a link which says +@samp{[Group]}, @samp{[Option]} or @samp{[Face]}. Invoking this link +creates an ordinary customization buffer showing just that group and +its contents, just that user option, or just that face. This is the +way to change settings that you find with @kbd{M-x customize-browse}. + + If you can guess part of the name of the settings you are interested +in, @kbd{M-x customize-apropos} is another way to search for settings. +However, unlike @code{customize} and @code{customize-browse}, +@code{customize-apropos} can only find groups and settings that are +loaded in the current Emacs session. @xref{Specific Customization,, +Customizing Specific Items}. + +@node Changing a Variable +@subsection Changing a Variable + + Here is an example of what a variable (a user option) looks like in +the customization buffer: + +@smallexample +Kill Ring Max: [Hide Value] 60 + [State]: STANDARD. +Maximum length of kill ring before oldest elements are thrown away. +@end smallexample + + The text following @samp{[Hide Value]}, @samp{60} in this case, indicates +the current value of the variable. If you see @samp{[Show Value]} instead of +@samp{[Hide Value]}, it means that the value is hidden; the customization +buffer initially hides values that take up several lines. Invoke +@samp{[Show Value]} to show the value. + + The line after the variable name indicates the @dfn{customization +state} of the variable: in the example above, it says you have not +changed the option yet. The @samp{[State]} button at the beginning of +this line gives you a menu of various operations for customizing the +variable. + + The line after the @samp{[State]} line displays the beginning of the +variable's documentation string. If there are more lines of +documentation, this line ends with a @samp{[More]} button; invoke that +to show the full documentation string. + + To enter a new value for @samp{Kill Ring Max}, move point to the +value and edit it textually. For example, you can type @kbd{M-d}, +then insert another number. As you begin to alter the text, you will +see the @samp{[State]} line change to say that you have edited the +value: + +@smallexample +[State]: EDITED, shown value does not take effect until you set or @r{@dots{}} + save it. +@end smallexample + +@cindex user options, how to set +@cindex variables, how to set +@cindex settings, how to set + Editing the value does not actually set the variable. To do that, +you must @dfn{set} the variable. To do this, invoke the +@samp{[State]} button and choose @samp{Set for Current Session}. + + The state of the variable changes visibly when you set it: + +@smallexample +[State]: SET for current session only. +@end smallexample + + You don't have to worry about specifying a value that is not valid; +the @samp{Set for Current Session} operation checks for validity and +will not install an unacceptable value. + +@kindex M-TAB @r{(customization buffer)} +@findex widget-complete + While editing a field that is a file name, directory name, +command name, or anything else for which completion is defined, you +can type @kbd{M-@key{TAB}} (@code{widget-complete}) to do completion. +(@kbd{@key{ESC} @key{TAB}} and @kbd{C-M-i} do the same thing.) + + Some variables have a small fixed set of possible legitimate values. +These variables don't let you edit the value textually. Instead, a +@samp{[Value Menu]} button appears before the value; invoke this +button to change the value. For a boolean ``on or off'' value, the +button says @samp{[Toggle]}, and it changes to the other value. +@samp{[Value Menu]} and @samp{[Toggle]} simply edit the buffer; the +changes take real effect when you use the @samp{Set for Current +Session} operation. + + Some variables have values with complex structure. For example, the +value of @code{file-coding-system-alist} is an association list. Here +is how it appears in the customization buffer: + +@smallexample +File Coding System Alist: [Hide Value] +[INS] [DEL] File regexp: \.elc\' + Choice: [Value Menu] Encoding/decoding pair: + Decoding: emacs-mule + Encoding: emacs-mule +[INS] [DEL] File regexp: \(\`\|/\)loaddefs.el\' + Choice: [Value Menu] Encoding/decoding pair: + Decoding: raw-text + Encoding: raw-text-unix +[INS] [DEL] File regexp: \.tar\' + Choice: [Value Menu] Encoding/decoding pair: + Decoding: no-conversion + Encoding: no-conversion +[INS] [DEL] File regexp: + Choice: [Value Menu] Encoding/decoding pair: + Decoding: undecided + Encoding: nil +[INS] + [State]: STANDARD. +Alist to decide a coding system to use for a file I/O @r{@dots{}} + operation. [Hide Rest] +The format is ((PATTERN . VAL) ...), +where PATTERN is a regular expression matching a file name, +@r{[@dots{}more lines of documentation@dots{}]} +@end smallexample + +@noindent +Each association in the list appears on four lines, with several +editable fields and/or buttons. You can edit the regexps and coding +systems using ordinary editing commands. You can also invoke +@samp{[Value Menu]} to switch to a different kind of value---for +instance, to specify a function instead of a pair of coding systems. + +To delete an association from the list, invoke the @samp{[DEL]} button +for that item. To add an association, invoke @samp{[INS]} at the +position where you want to add it. There is an @samp{[INS]} button +between each pair of associations, another at the beginning and another +at the end, so you can add a new association at any position in the +list. + +@kindex TAB @r{(customization buffer)} +@kindex S-TAB @r{(customization buffer)} +@findex widget-forward +@findex widget-backward + Two special commands, @key{TAB} and @kbd{S-@key{TAB}}, are useful +for moving through the customization buffer. @key{TAB} +(@code{widget-forward}) moves forward to the next button or editable +field; @kbd{S-@key{TAB}} (@code{widget-backward}) moves backward to +the previous button or editable field. + + Typing @key{RET} on an editable field also moves forward, just like +@key{TAB}. We set it up this way because people often type @key{RET} +when they are finished editing a field. To insert a newline within an +editable field, use @kbd{C-o} or @kbd{C-q C-j}. + +@cindex saving a setting +@cindex settings, how to save + Setting the variable changes its value in the current Emacs session; +@dfn{saving} the value changes it for future sessions as well. To +save the variable, invoke @samp{[State]} and select the @samp{Save for +Future Sessions} operation. This works by writing code so as to set +the variable again, each time you start Emacs (@pxref{Saving +Customizations}). + + You can also restore the variable to its standard value by invoking +@samp{[State]} and selecting the @samp{Erase Customization} operation. +There are actually four reset operations: + +@table @samp +@item Undo Edits +If you have made some modifications and not yet set the variable, +this restores the text in the customization buffer to match +the actual value. + +@item Reset to Saved +This restores the value of the variable to the last saved value, +and updates the text accordingly. + +@item Erase Customization +This sets the variable to its standard value, and updates the text +accordingly. This also eliminates any saved value for the variable, +so that you will get the standard value in future Emacs sessions. + +@item Set to Backup Value +This sets the variable to a previous value that was set in the +customization buffer in this session. If you customize a variable +and then reset it, which discards the customized value, +you can get the discarded value back again with this operation. +@end table + +@cindex comments on customized settings + Sometimes it is useful to record a comment about a specific +customization. Use the @samp{Add Comment} item from the +@samp{[State]} menu to create a field for entering the comment. The +comment you enter will be saved, and displayed again if you again view +the same variable in a customization buffer, even in another session. + + The state of a group indicates whether anything in that group has been +edited, set or saved. + + Near the top of the customization buffer there are two lines of buttons: + +@smallexample + [Set for Current Session] [Save for Future Sessions] + [Undo Edits] [Reset to Saved] [Erase Customization] [Finish] +@end smallexample + +@vindex custom-buffer-done-function +@noindent +Invoking @samp{[Finish]} either buries or kills this customization +buffer according to the setting of the option +@code{custom-buffer-done-kill}; the default is to bury the buffer. +Each of the other buttons performs an operation---set, save or +reset---on each of the settings in the buffer that could meaningfully +be set, saved or reset. They do not operate on settings whose values +are hidden, nor on subgroups which are hidden or not visible in the buffer. + +@node Saving Customizations +@subsection Saving Customizations + + Saving customizations from the customization buffer works by writing +code that future sessions will read, code to set up those +customizations again. + +@vindex custom-file + Normally this saves customizations in your init file, +@file{~/.emacs}. If you wish, you can save customizations in another +file instead. To make this work, your @file{~/.emacs} should set +@code{custom-file} to the name of that file. Then you should load the +file by calling @code{load}. For example: + +@example +(setq custom-file "~/.emacs-custom.el") +(load custom-file) +@end example + + You can use @code{custom-file} to specify different customization +files for different Emacs versions, like this: + +@example +(cond ((< emacs-major-version 21) + ;; @r{Emacs 20 customization.} + (setq custom-file "~/.custom-20.el")) + ((and (= emacs-major-version 21) (< emacs-minor-version 4)) + ;; @r{Emacs 21 customization, before version 21.4.} + (setq custom-file "~/.custom-21.el")) + ((< emacs-major-version 22) + ;; @r{Emacs version 21.4 or later.} + (setq custom-file "~/.custom-21.4.el")) + (t + ;; @r{Emacs version 22.1 or later.} + (setq custom-file "~/.custom-22.el"))) + +(load custom-file) +@end example + + If Emacs was invoked with the @option{-q} or @option{--no-init-file} +options (@pxref{Initial Options}), it will not let you save your +customizations in your @file{~/.emacs} init file. This is because +saving customizations from such a session would wipe out all the other +customizations you might have on your init file. + +@node Face Customization +@subsection Customizing Faces +@cindex customizing faces +@cindex bold font +@cindex italic font +@cindex fonts and faces + + In addition to variables, some customization groups also include +faces. When you show the contents of a group, both the variables and +the faces in the group appear in the customization buffer. Here is an +example of how a face looks: + +@smallexample +Custom Changed Face:(sample) [Hide Face] + [State]: STANDARD. +Face used when the customize item has been changed. +Parent groups: [Custom Magic Faces] +Attributes: [ ] Font Family: * + [ ] Width: * + [ ] Height: * + [ ] Weight: * + [ ] Slant: * + [ ] Underline: * + [ ] Overline: * + [ ] Strike-through: * + [ ] Box around text: * + [ ] Inverse-video: * + [X] Foreground: white (sample) + [X] Background: blue (sample) + [ ] Stipple: * + [ ] Inherit: * +@end smallexample + + Each face attribute has its own line. The @samp{[@var{x}]} button +before the attribute name indicates whether the attribute is +@dfn{enabled}; @samp{[X]} means that it's enabled, and @samp{[ ]} +means that it's disabled. You can enable or disable the attribute by +clicking that button. When the attribute is enabled, you can change +the attribute value in the usual ways. + + For the colors, you can specify a color name (use @kbd{M-x +list-colors-display} for a list of them) or a hexadecimal color +specification of the form @samp{#@var{rr}@var{gg}@var{bb}}. +(@samp{#000000} is black, @samp{#ff0000} is red, @samp{#00ff00} is +green, @samp{#0000ff} is blue, and @samp{#ffffff} is white.) On a +black-and-white display, the colors you can use for the background are +@samp{black}, @samp{white}, @samp{gray}, @samp{gray1}, and +@samp{gray3}. Emacs supports these shades of gray by using background +stipple patterns instead of a color. + + Setting, saving and resetting a face work like the same operations for +variables (@pxref{Changing a Variable}). + + A face can specify different appearances for different types of +display. For example, a face can make text red on a color display, but +use a bold font on a monochrome display. To specify multiple +appearances for a face, select @samp{For All Kinds of Displays} in the +menu you get from invoking @samp{[State]}. + +@findex modify-face + Another more basic way to set the attributes of a specific face is +with @kbd{M-x modify-face}. This command reads the name of a face, then +reads the attributes one by one. For the color and stipple attributes, +the attribute's current value is the default---type just @key{RET} if +you don't want to change that attribute. Type @samp{none} if you want +to clear out the attribute. + +@node Specific Customization +@subsection Customizing Specific Items + + Instead of finding the setting you want to change by navigating the +structure of groups, here are other ways to specify the settings that +you want to customize. + +@table @kbd +@item M-x customize-option @key{RET} @var{option} @key{RET} +Set up a customization buffer with just one user option variable, +@var{option}. +@item M-x customize-face @key{RET} @var{face} @key{RET} +Set up a customization buffer with just one face, @var{face}. +@item M-x customize-group @key{RET} @var{group} @key{RET} +Set up a customization buffer with just one group, @var{group}. +@item M-x customize-apropos @key{RET} @var{regexp} @key{RET} +Set up a customization buffer with all the settings and groups that +match @var{regexp}. +@item M-x customize-changed @key{RET} @var{version} @key{RET} +Set up a customization buffer with all the settings and groups +whose meaning has changed since Emacs version @var{version}. +@item M-x customize-saved +Set up a customization buffer containing all settings that you +have saved with customization buffers. +@item M-x customize-unsaved +Set up a customization buffer containing all settings that you have +set but not saved. +@end table + +@findex customize-option + If you want to alter a particular user option with the customization +buffer, and you know its name, you can use the command @kbd{M-x +customize-option} and specify the user option (variable) name. This +sets up the customization buffer with just one user option---the one +that you asked for. Editing, setting and saving the value work as +described above, but only for the specified user option. Minibuffer +completion is handy if you only know part of the name. However, this +command can only see options that have been loaded in the current +Emacs session. + +@findex customize-face + Likewise, you can modify a specific face, chosen by name, using +@kbd{M-x customize-face}. By default it operates on the face used +on the character after point. + +@findex customize-group + You can also set up the customization buffer with a specific group, +using @kbd{M-x customize-group}. The immediate contents of the chosen +group, including settings (user options and faces), and other groups, +all appear as well (even if not already loaded). However, the +subgroups' own contents are not included. + +@findex customize-apropos + For a more general way of controlling what to customize, you can use +@kbd{M-x customize-apropos}. You specify a regular expression as +argument; then all @emph{loaded} settings and groups whose names match +this regular expression are set up in the customization buffer. If +you specify an empty regular expression, this includes @emph{all} +loaded groups and settings---which takes a long time to set up. + +@findex customize-changed + When you upgrade to a new Emacs version, you might want to consider +customizing new settings, and settings whose meanings or default +values have changed. To do this, use @kbd{M-x customize-changed} and +specify a previous Emacs version number using the minibuffer. It +creates a customization buffer which shows all the settings and groups +whose definitions have been changed since the specified version, +loading them if necessary. + +@findex customize-saved +@findex customize-unsaved + If you change settings and then decide the change was a mistake, you +can use two special commands to revisit your previous changes. Use +@kbd{M-x customize-saved} to look at the settings that you have saved. +Use @kbd{M-x customize-unsaved} to look at the settings that you +have set but not saved. + +@node Custom Themes +@subsection Customization Themes +@cindex custom themes + + @dfn{Custom themes} are collections of settings that can be enabled +or disabled as a unit. You can use Custom themes to switch quickly +and easily between various collections of settings, and to transfer +such collections from one computer to another. + +@findex customize-create-theme + To define a Custom theme, use @kbd{M-x customize-create-theme}, +which brings up a buffer named @samp{*New Custom Theme*}. At the top +of the buffer is an editable field where you can specify the name of +the theme. Click on the button labelled @samp{Insert Variable} to add +a variable to the theme, and click on @samp{Insert Face} to add a +face. You can edit these values in the @samp{*New Custom Theme*} +buffer like in an ordinary Customize buffer. To remove an option from +the theme, click on its @samp{State} button and select @samp{Delete}. + +@vindex custom-theme-directory + After adding the desired options, click on @samp{Save Theme} to save +the Custom theme. This writes the theme definition to a file +@file{@var{foo}-theme.el} (where @var{foo} is the theme name you +supplied), in the directory @file{~/.emacs.d/}. You can specify the +directory by setting @code{custom-theme-directory}. + + You can view and edit the settings of a previously-defined theme by +clicking on @samp{Visit Theme} and specifying the theme name. You can +also import the variables and faces that you have set using Customize +by visiting the ``special'' theme named @samp{user}. This theme, which +records all the options that you set in the ordinary customization +buffer, is always enabled, and always takes precedence over all other +enabled Custom themes. Additionally, the @samp{user} theme is +recorded with code in your @file{.emacs} file, rather than a +@file{user-theme.el} file. + +@vindex custom-enabled-themes + Once you have defined a Custom theme, you can use it by customizing +the variable @code{custom-enabled-themes}. This is a list of Custom +themes that are @dfn{enabled}, or put into effect. If you set +@code{custom-enabled-themes} using the Customize interface, the theme +definitions are automatically loaded from the theme files, if they +aren't already. If you save the value of @code{custom-enabled-themes} +for future Emacs sessions, those Custom themes will be enabled +whenever Emacs is started up. + + If two enabled themes specify different values for an option, the +theme occurring earlier in @code{custom-enabled-themes} takes effect. + +@findex load-theme +@findex enable-theme +@findex disable-theme + You can temporarily enable a Custom theme with @kbd{M-x +enable-theme}. This prompts for a theme name in the minibuffer, loads +the theme from the theme file if necessary, and enables the theme. +You can @dfn{disable} any enabled theme with the command @kbd{M-x +disable-theme}; this returns the options specified in the theme to +their original values. To re-enable the theme, type @kbd{M-x +enable-theme} again. If a theme file is changed during your Emacs +session, you can reload it by typing @kbd{M-x load-theme}. (This also +enables the theme.) + +@node Variables +@section Variables +@cindex variable +@cindex option, user +@cindex user option + + A @dfn{variable} is a Lisp symbol which has a value. The symbol's +name is also called the name of the variable. A variable name can +contain any characters that can appear in a file, but conventionally +variable names consist of words separated by hyphens. A variable can +have a documentation string which describes what kind of value it should +have and how the value will be used. + + Emacs Lisp allows any variable (with a few exceptions) to have any +kind of value, but most variables that Emacs uses expect a value of a +certain type. Often the value should always be a string, or should +always be a number. Sometimes we say that a certain feature is turned +on if a variable is ``non-@code{nil},'' meaning that if the variable's +value is @code{nil}, the feature is off, but the feature is on for +@emph{any} other value. The conventional value to use to turn on the +feature---since you have to pick one particular value when you set the +variable---is @code{t}. + + Emacs uses many Lisp variables for internal record keeping, but the +most interesting variables for a non-programmer user are those meant +for users to change---these are called @dfn{user options}. + + Each user option that you can set with the customization buffer is +in fact a Lisp variable. Emacs does not (usually) change the values +of these variables on its own; instead, you set the values in order to +control the behavior of certain Emacs commands. Use of the +customization buffer is explained above (@pxref{Easy Customization}); +here we describe other aspects of Emacs variables. + +@menu +* Examining:: Examining or setting one variable's value. +* Hooks:: Hook variables let you specify programs for parts + of Emacs to run on particular occasions. +* Locals:: Per-buffer values of variables. +* File Variables:: How files can specify variable values. +@end menu + +@node Examining +@subsection Examining and Setting Variables +@cindex setting variables + +@table @kbd +@item C-h v @var{var} @key{RET} +Display the value and documentation of variable @var{var} +(@code{describe-variable}). +@item M-x set-variable @key{RET} @var{var} @key{RET} @var{value} @key{RET} +Change the value of variable @var{var} to @var{value}. +@end table + + To examine the value of a single variable, use @kbd{C-h v} +(@code{describe-variable}), which reads a variable name using the +minibuffer, with completion. It displays both the value and the +documentation of the variable. For example, + +@example +C-h v fill-column @key{RET} +@end example + +@noindent +displays something like this: + +@smallexample +fill-column is a variable defined in `C source code'. +fill-column's value is 70 +Local in buffer custom.texi; global value is 70 +Automatically becomes buffer-local when set in any fashion. + +This variable is safe to use as a file local variable only if its value +satisfies the predicate `integerp'. + +Documentation: +*Column beyond which automatic line-wrapping should happen. +Interactively, you can set the buffer local value using C-x f. + +You can customize this variable. +@end smallexample + +@noindent +The line that says you can customize the variable indicates that this +variable is a user option. (The star also indicates this, but it is +an obsolete indicator that may eventually disappear.) @kbd{C-h v} is +not restricted to user options; it allows any variable name. + +@findex set-variable +The most convenient way to set a specific user option variable is with +@kbd{M-x set-variable}. This reads the variable name with the +minibuffer (with completion), and then reads a Lisp expression for the +new value using the minibuffer a second time (you can insert the old +value into the minibuffer for editing via @kbd{M-n}). For example, + +@example +M-x set-variable @key{RET} fill-column @key{RET} 75 @key{RET} +@end example + +@noindent +sets @code{fill-column} to 75. + + @kbd{M-x set-variable} is limited to user option variables, but you can +set any variable with a Lisp expression, using the function @code{setq}. +Here is a @code{setq} expression to set @code{fill-column}: + +@example +(setq fill-column 75) +@end example + + To execute an expression like this one, go to the @samp{*scratch*} +buffer, type in the expression, and then type @kbd{C-j}. @xref{Lisp +Interaction}. + + Setting variables, like all means of customizing Emacs except where +otherwise stated, affects only the current Emacs session. The only +way to alter the variable in future sessions is to put something in +the @file{~/.emacs} file to set it those sessions (@pxref{Init File}). + +@node Hooks +@subsection Hooks +@cindex hook +@cindex running a hook + + @dfn{Hooks} are an important mechanism for customization of Emacs. A +hook is a Lisp variable which holds a list of functions, to be called on +some well-defined occasion. (This is called @dfn{running the hook}.) +The individual functions in the list are called the @dfn{hook functions} +of the hook. With rare exceptions, hooks in Emacs are empty when Emacs +starts up, so the only hook functions in any given hook are the ones you +explicitly put there as customization. + + Most major modes run one or more @dfn{mode hooks} as the last step of +initialization. This makes it easy for you to customize the behavior of +the mode, by setting up a hook function to override the local variable +assignments already made by the mode. But hooks are also used in other +contexts. For example, the hook @code{suspend-hook} runs just before +Emacs suspends itself (@pxref{Exiting}). + +@cindex normal hook + Most Emacs hooks are @dfn{normal hooks}. This means that running the +hook operates by calling all the hook functions, unconditionally, with +no arguments. We have made an effort to keep most hooks normal so that +you can use them in a uniform way. Every variable in Emacs whose name +ends in @samp{-hook} is a normal hook. + +@cindex abnormal hook + There are also a few @dfn{abnormal hooks}. These variables' names end +in @samp{-hooks} or @samp{-functions}, instead of @samp{-hook}. What +makes these hooks abnormal is that there is something peculiar about the +way its functions are called---perhaps they are given arguments, or +perhaps the values they return are used in some way. For example, +@code{find-file-not-found-functions} (@pxref{Visiting}) is abnormal because +as soon as one hook function returns a non-@code{nil} value, the rest +are not called at all. The documentation of each abnormal hook variable +explains in detail what is peculiar about it. + +@findex add-hook + You can set a hook variable with @code{setq} like any other Lisp +variable, but the recommended way to add a hook function to a hook +(either normal or abnormal) is by calling @code{add-hook}. +@xref{Hooks,,, elisp, The Emacs Lisp Reference Manual}. + + For example, here's how to set up a hook to turn on Auto Fill mode +when entering Text mode and other modes based on Text mode: + +@example +(add-hook 'text-mode-hook 'turn-on-auto-fill) +@end example + + The next example shows how to use a hook to customize the indentation +of C code. (People often have strong personal preferences for one +format compared to another.) Here the hook function is an anonymous +lambda expression. + +@example +@group +(setq my-c-style + '((c-comment-only-line-offset . 4) +@end group +@group + (c-cleanup-list . (scope-operator + empty-defun-braces + defun-close-semi)) +@end group +@group + (c-offsets-alist . ((arglist-close . c-lineup-arglist) + (substatement-open . 0))))) +@end group + +@group +(add-hook 'c-mode-common-hook + '(lambda () + (c-add-style "my-style" my-c-style t))) +@end group +@end example + + It is best to design your hook functions so that the order in which +they are executed does not matter. Any dependence on the order is +``asking for trouble.'' However, the order is predictable: the most +recently added hook functions are executed first. + +@findex remove-hook + If you play with adding various different versions of a hook +function by calling @code{add-hook} over and over, remember that all +the versions you added will remain in the hook variable together. You +can clear out individual functions by calling @code{remove-hook}, or +do @code{(setq @var{hook-variable} nil)} to remove everything. + +@node Locals +@subsection Local Variables + +@table @kbd +@item M-x make-local-variable @key{RET} @var{var} @key{RET} +Make variable @var{var} have a local value in the current buffer. +@item M-x kill-local-variable @key{RET} @var{var} @key{RET} +Make variable @var{var} use its global value in the current buffer. +@item M-x make-variable-buffer-local @key{RET} @var{var} @key{RET} +Mark variable @var{var} so that setting it will make it local to the +buffer that is current at that time. +@end table + +@cindex local variables + Almost any variable can be made @dfn{local} to a specific Emacs +buffer. This means that its value in that buffer is independent of its +value in other buffers. A few variables are always local in every +buffer. Every other Emacs variable has a @dfn{global} value which is in +effect in all buffers that have not made the variable local. + +@findex make-local-variable + @kbd{M-x make-local-variable} reads the name of a variable and makes +it local to the current buffer. Changing its value subsequently in +this buffer will not affect others, and changes in its global value +will not affect this buffer. + +@findex make-variable-buffer-local +@cindex per-buffer variables + @kbd{M-x make-variable-buffer-local} marks a variable so it will +become local automatically whenever it is set. More precisely, once a +variable has been marked in this way, the usual ways of setting the +variable automatically do @code{make-local-variable} first. We call +such variables @dfn{per-buffer} variables. Many variables in Emacs +are normally per-buffer; the variable's document string tells you when +this is so. A per-buffer variable's global value is normally never +effective in any buffer, but it still has a meaning: it is the initial +value of the variable for each new buffer. + + Major modes (@pxref{Major Modes}) always make variables local to the +buffer before setting the variables. This is why changing major modes +in one buffer has no effect on other buffers. Minor modes also work +by setting variables---normally, each minor mode has one controlling +variable which is non-@code{nil} when the mode is enabled +(@pxref{Minor Modes}). For many minor modes, the controlling variable +is per buffer, and thus always buffer-local. Otherwise, you can make +it local in a specific buffer like any other variable. + + A few variables cannot be local to a buffer because they are always +local to each display instead (@pxref{Multiple Displays}). If you try to +make one of these variables buffer-local, you'll get an error message. + +@findex kill-local-variable + @kbd{M-x kill-local-variable} makes a specified variable cease to be +local to the current buffer. The global value of the variable +henceforth is in effect in this buffer. Setting the major mode kills +all the local variables of the buffer except for a few variables +specially marked as @dfn{permanent locals}. + +@findex setq-default + To set the global value of a variable, regardless of whether the +variable has a local value in the current buffer, you can use the Lisp +construct @code{setq-default}. This construct is used just like +@code{setq}, but it sets variables' global values instead of their local +values (if any). When the current buffer does have a local value, the +new global value may not be visible until you switch to another buffer. +Here is an example: + +@example +(setq-default fill-column 75) +@end example + +@noindent +@code{setq-default} is the only way to set the global value of a variable +that has been marked with @code{make-variable-buffer-local}. + +@findex default-value + Lisp programs can use @code{default-value} to look at a variable's +default value. This function takes a symbol as argument and returns its +default value. The argument is evaluated; usually you must quote it +explicitly. For example, here's how to obtain the default value of +@code{fill-column}: + +@example +(default-value 'fill-column) +@end example + +@node File Variables +@subsection Local Variables in Files +@cindex local variables in files +@cindex file local variables + + A file can specify local variable values for use when you edit the +file with Emacs. Visiting the file checks for local variable +specifications; it automatically makes these variables local to the +buffer, and sets them to the values specified in the file. + +@menu +* Specifying File Variables:: Specifying file local variables. +* Safe File Variables:: Making sure file local variables are safe. +@end menu + +@node Specifying File Variables +@subsubsection Specifying File Variables + + There are two ways to specify file local variable values: in the first +line, or with a local variables list. Here's how to specify them in the +first line: + +@example +-*- mode: @var{modename}; @var{var}: @var{value}; @dots{} -*- +@end example + +@noindent +You can specify any number of variables/value pairs in this way, each +pair with a colon and semicolon as shown above. @code{mode: +@var{modename};} specifies the major mode; this should come first in the +line. The @var{value}s are not evaluated; they are used literally. +Here is an example that specifies Lisp mode and sets two variables with +numeric values: + +@smallexample +;; -*- mode: Lisp; fill-column: 75; comment-column: 50; -*- +@end smallexample + + You can also specify the coding system for a file in this way: just +specify a value for the ``variable'' named @code{coding}. The ``value'' +must be a coding system name that Emacs recognizes. @xref{Coding +Systems}. @w{@samp{unibyte: t}} specifies unibyte loading for a +particular Lisp file. @xref{Enabling Multibyte}. + + The @code{eval} pseudo-variable, described below, can be specified in +the first line as well. + +@cindex shell scripts, and local file variables + In shell scripts, the first line is used to identify the script +interpreter, so you cannot put any local variables there. To +accommodate this, Emacs looks for local variable specifications in the +@emph{second} line when the first line specifies an interpreter. + + A @dfn{local variables list} goes near the end of the file, in the +last page. (It is often best to put it on a page by itself.) The local +variables list starts with a line containing the string @samp{Local +Variables:}, and ends with a line containing the string @samp{End:}. In +between come the variable names and values, one set per line, as +@samp{@var{variable}:@: @var{value}}. The @var{value}s are not +evaluated; they are used literally. If a file has both a local +variables list and a @samp{-*-} line, Emacs processes @emph{everything} +in the @samp{-*-} line first, and @emph{everything} in the local +variables list afterward. + + Here is an example of a local variables list: + +@example +;; Local Variables: ** +;; mode:lisp ** +;; comment-column:0 ** +;; comment-start: ";; " ** +;; comment-end:"**" ** +;; End: ** +@end example + + Each line starts with the prefix @samp{;; } and each line ends with +the suffix @samp{ **}. Emacs recognizes these as the prefix and +suffix based on the first line of the list, by finding them +surrounding the magic string @samp{Local Variables:}; then it +automatically discards them from the other lines of the list. + + The usual reason for using a prefix and/or suffix is to embed the +local variables list in a comment, so it won't confuse other programs +that the file is intended as input for. The example above is for a +language where comment lines start with @samp{;; } and end with +@samp{**}; the local values for @code{comment-start} and +@code{comment-end} customize the rest of Emacs for this unusual +syntax. Don't use a prefix (or a suffix) if you don't need one. + + If you write a multi-line string value, you should put the prefix +and suffix on each line, even lines that start or end within the +string. They will be stripped off for processing the list. If you +want to split a long string across multiple lines of the file, you can +use backslash-newline, which is ignored in Lisp string constants. +Here's an example of doing this: + +@example +# Local Variables: +# compile-command: "cc foo.c -Dfoo=bar -Dhack=whatever \ +# -Dmumble=blaah" +# End: +@end example + + Some ``variable names'' have special meanings in a local variables +list. Specifying the ``variable'' @code{mode} really sets the major +mode, while any value specified for the ``variable'' @code{eval} is +simply evaluated as an expression (its value is ignored). A value for +@code{coding} specifies the coding system for character code +conversion of this file, and a value of @code{t} for @code{unibyte} +says to visit the file in a unibyte buffer. These four ``variables'' +are not really variables; setting them in any other context has no +special meaning. + + @emph{If @code{mode} is used to set a major mode, it should be the +first ``variable'' in the list.} Otherwise, the entries that precede +it will usually be ignored, since most modes kill all local variables +as part of their initialization. + + You can use the @code{mode} ``variable'' to set minor modes as well +as the major modes; in fact, you can use it more than once, first to +set the major mode and then to set minor modes which are specific to +particular buffers. But most minor modes should not be specified in +the file at all, because they represent user preferences. + + For example, you may be tempted to try to turn on Auto Fill mode with +a local variable list. That is a mistake. The choice of Auto Fill mode +or not is a matter of individual taste, not a matter of the contents of +particular files. If you want to use Auto Fill, set up major mode hooks +with your @file{.emacs} file to turn it on (when appropriate) for you +alone (@pxref{Init File}). Don't use a local variable list to impose +your taste on everyone. + + The start of the local variables list must be no more than 3000 +characters from the end of the file, and must be in the last page if the +file is divided into pages. Otherwise, Emacs will not notice it is +there. The purpose of this rule is so that a stray @samp{Local +Variables:}@: not in the last page does not confuse Emacs, and so that +visiting a long file that is all one page and has no local variables +list need not take the time to search the whole file. + + Use the command @code{normal-mode} to reset the local variables and +major mode of a buffer according to the file name and contents, +including the local variables list if any. @xref{Choosing Modes}. + +@node Safe File Variables +@subsubsection Safety of File Variables + + File-local variables can be dangerous; when you visit someone else's +file, there's no telling what its local variables list could do to +your Emacs. Improper values of the @code{eval} ``variable,'' and +other variables such as @code{load-path}, could execute Lisp code you +didn't intend to run. + + Therefore, whenever Emacs encounters file local variable values that +are not known to be safe, it displays the file's entire local +variables list, and asks you for confirmation before setting them. +You can type @kbd{y} or @key{SPC} to put the local variables list into +effect, or @kbd{n} to ignore it. When Emacs is run in batch mode +(@pxref{Initial Options}), it can't really ask you, so it assumes the +answer @kbd{n}. + + Emacs normally recognizes certain variables/value pairs as safe. +For instance, it is safe to give @code{comment-column} or +@code{fill-column} any integer value. If a file specifies only +known-safe variable/value pairs, Emacs does not ask for confirmation +before setting them. Otherwise, you can tell Emacs to record all the +variable/value pairs in this file as safe, by typing @kbd{!} at the +confirmation prompt. When Emacs encounters these variable/value pairs +subsequently, in the same file or others, it will assume they are +safe. + +@vindex safe-local-variable-values +@cindex risky variable + Some variables, such as @code{load-path}, are considered +particularly @dfn{risky}: there is seldom any reason to specify them +as local variables, and changing them can be dangerous. If a file +contains only risky local variables, Emacs neither offers nor accepts +@kbd{!} as input at the confirmation prompt. If some of the local +variables in a file are risky, and some are only potentially unsafe, you +can enter @kbd{!} at the prompt. It applies all the variables, but only +marks the non-risky ones as safe for the future. If you really want to +record safe values for risky variables, do it directly by customizing +@samp{safe-local-variable-values} (@pxref{Easy Customization}). + +@vindex enable-local-variables + The variable @code{enable-local-variables} allows you to change the +way Emacs processes local variables. Its default value is @code{t}, +which specifies the behavior described above. If it is @code{nil}, +Emacs simply ignores all file local variables. @code{:safe} means use +only the safe values and ignore the rest. Any other value says to +query you about each file that has local variables, without trying to +determine whether the values are known to be safe. + +@vindex enable-local-eval + The variable @code{enable-local-eval} controls whether Emacs +processes @code{eval} variables. The three possibilities for the +variable's value are @code{t}, @code{nil}, and anything else, just as +for @code{enable-local-variables}. The default is @code{maybe}, which +is neither @code{t} nor @code{nil}, so normally Emacs does ask for +confirmation about processing @code{eval} variables. + +@vindex safe-local-eval-forms + But there is an exception. The @code{safe-local-eval-forms} is a +customizable list of eval forms which are safe. Emacs does not ask +for confirmation when it finds these forms for the @code{eval} +variable. + +@node Key Bindings +@section Customizing Key Bindings +@cindex key bindings + + This section describes @dfn{key bindings}, which map keys to commands, +and @dfn{keymaps}, which record key bindings. It also explains how +to customize key bindings. + + Recall that a command is a Lisp function whose definition provides for +interactive use. Like every Lisp function, a command has a function +name, which usually consists of lower-case letters and hyphens. + +@menu +* Keymaps:: Generalities. The global keymap. +* Prefix Keymaps:: Keymaps for prefix keys. +* Local Keymaps:: Major and minor modes have their own keymaps. +* Minibuffer Maps:: The minibuffer uses its own local keymaps. +* Rebinding:: How to redefine one key's meaning conveniently. +* Init Rebinding:: Rebinding keys with your init file, @file{.emacs}. +* Function Keys:: Rebinding terminal function keys. +* Named ASCII Chars:: Distinguishing @key{TAB} from @kbd{C-i}, and so on. +* Mouse Buttons:: Rebinding mouse buttons in Emacs. +* Disabling:: Disabling a command means confirmation is required + before it can be executed. This is done to protect + beginners from surprises. +@end menu + +@node Keymaps +@subsection Keymaps +@cindex keymap + + The bindings between key sequences and command functions are recorded +in data structures called @dfn{keymaps}. Emacs has many of these, each +used on particular occasions. + + Recall that a @dfn{key sequence} (@dfn{key}, for short) is a sequence +of @dfn{input events} that have a meaning as a unit. Input events +include characters, function keys and mouse buttons---all the inputs +that you can send to the computer with your terminal. A key sequence +gets its meaning from its @dfn{binding}, which says what command it +runs. The function of keymaps is to record these bindings. + +@cindex global keymap + The @dfn{global} keymap is the most important keymap because it is +always in effect. The global keymap defines keys for Fundamental mode; +most of these definitions are common to most or all major modes. Each +major or minor mode can have its own keymap which overrides the global +definitions of some keys. + + For example, a self-inserting character such as @kbd{g} is +self-inserting because the global keymap binds it to the command +@code{self-insert-command}. The standard Emacs editing characters such +as @kbd{C-a} also get their standard meanings from the global keymap. +Commands to rebind keys, such as @kbd{M-x global-set-key}, actually work +by storing the new binding in the proper place in the global map. +@xref{Rebinding}. + + Meta characters work differently; Emacs translates each Meta +character into a pair of characters starting with @key{ESC}. When you +type the character @kbd{M-a} in a key sequence, Emacs replaces it with +@kbd{@key{ESC} a}. A meta key comes in as a single input event, but +becomes two events for purposes of key bindings. The reason for this is +historical, and we might change it someday. + +@cindex function key + Most modern keyboards have function keys as well as character keys. +Function keys send input events just as character keys do, and keymaps +can have bindings for them. + + On text terminals, typing a function key actually sends the computer a +sequence of characters; the precise details of the sequence depends on +which function key and on the model of terminal you are using. (Often +the sequence starts with @kbd{@key{ESC} [}.) If Emacs understands your +terminal type properly, it recognizes the character sequences forming +function keys wherever they occur in a key sequence (not just at the +beginning). Thus, for most purposes, you can pretend the function keys +reach Emacs directly and ignore their encoding as character sequences. + +@cindex mouse + Mouse buttons also produce input events. These events come with other +data---the window and position where you pressed or released the button, +and a time stamp. But only the choice of button matters for key +bindings; the other data matters only if a command looks at it. +(Commands designed for mouse invocation usually do look at the other +data.) + + A keymap records definitions for single events. Interpreting a key +sequence of multiple events involves a chain of keymaps. The first +keymap gives a definition for the first event; this definition is +another keymap, which is used to look up the second event in the +sequence, and so on. + + Key sequences can mix function keys and characters. For example, +@kbd{C-x @key{SELECT}} is meaningful. If you make @key{SELECT} a prefix +key, then @kbd{@key{SELECT} C-n} makes sense. You can even mix mouse +events with keyboard events, but we recommend against it, because such +key sequences are inconvenient to use. + + As a user, you can redefine any key; but it is usually best to stick +to key sequences that consist of @kbd{C-c} followed by a letter (upper +or lower case). These keys are ``reserved for users,'' so they won't +conflict with any properly designed Emacs extension. The function +keys @key{F5} through @key{F9} are also reserved for users. If you +redefine some other key, your definition may be overridden by certain +extensions or major modes which redefine the same key. + +@node Prefix Keymaps +@subsection Prefix Keymaps + + A prefix key such as @kbd{C-x} or @key{ESC} has its own keymap, +which holds the definition for the event that immediately follows +that prefix. + + The definition of a prefix key is usually the keymap to use for +looking up the following event. The definition can also be a Lisp +symbol whose function definition is the following keymap; the effect is +the same, but it provides a command name for the prefix key that can be +used as a description of what the prefix key is for. Thus, the binding +of @kbd{C-x} is the symbol @code{Control-X-prefix}, whose function +definition is the keymap for @kbd{C-x} commands. The definitions of +@kbd{C-c}, @kbd{C-x}, @kbd{C-h} and @key{ESC} as prefix keys appear in +the global map, so these prefix keys are always available. + + Aside from ordinary prefix keys, there is a fictitious ``prefix key'' +which represents the menu bar; see @ref{Menu Bar,,,elisp, The Emacs Lisp +Reference Manual}, for special information about menu bar key bindings. +Mouse button events that invoke pop-up menus are also prefix keys; see +@ref{Menu Keymaps,,,elisp, The Emacs Lisp Reference Manual}, for more +details. + + Some prefix keymaps are stored in variables with names: + +@itemize @bullet +@item +@vindex ctl-x-map +@code{ctl-x-map} is the variable name for the map used for characters that +follow @kbd{C-x}. +@item +@vindex help-map +@code{help-map} is for characters that follow @kbd{C-h}. +@item +@vindex esc-map +@code{esc-map} is for characters that follow @key{ESC}. Thus, all Meta +characters are actually defined by this map. +@item +@vindex ctl-x-4-map +@code{ctl-x-4-map} is for characters that follow @kbd{C-x 4}. +@item +@vindex mode-specific-map +@code{mode-specific-map} is for characters that follow @kbd{C-c}. +@end itemize + +@node Local Keymaps +@subsection Local Keymaps + +@cindex local keymap + So far we have explained the ins and outs of the global map. Major +modes customize Emacs by providing their own key bindings in @dfn{local +keymaps}. For example, C mode overrides @key{TAB} to make it indent the +current line for C code. Portions of text in the buffer can specify +their own keymaps to substitute for the keymap of the buffer's major +mode. + +@cindex minor mode keymap + Minor modes can also have local keymaps. Whenever a minor mode is +in effect, the definitions in its keymap override both the major +mode's local keymap and the global keymap. + + A local keymap can locally redefine a key as a prefix key by defining +it as a prefix keymap. If the key is also defined globally as a prefix, +then its local and global definitions (both keymaps) effectively +combine: both of them are used to look up the event that follows the +prefix key. Thus, if the mode's local keymap defines @kbd{C-c} as +another keymap, and that keymap defines @kbd{C-z} as a command, this +provides a local meaning for @kbd{C-c C-z}. This does not affect other +sequences that start with @kbd{C-c}; if those sequences don't have their +own local bindings, their global bindings remain in effect. + + Another way to think of this is that Emacs handles a multi-event key +sequence by looking in several keymaps, one by one, for a binding of the +whole key sequence. First it checks the minor mode keymaps for minor +modes that are enabled, then it checks the major mode's keymap, and then +it checks the global keymap. This is not precisely how key lookup +works, but it's good enough for understanding the results in ordinary +circumstances. + +@cindex rebinding major mode keys + Most major modes construct their keymaps when the mode is used for +the first time in a session. If you wish to change one of these +keymaps, you must use the major mode's @dfn{mode hook} +(@pxref{Hooks}). + +@findex define-key + For example, the command @code{texinfo-mode} to select Texinfo mode +runs the hook @code{texinfo-mode-hook}. Here's how you can use the hook +to add local bindings (not very useful, we admit) for @kbd{C-c n} and +@kbd{C-c p} in Texinfo mode: + +@example +(add-hook 'texinfo-mode-hook + '(lambda () + (define-key texinfo-mode-map "\C-cp" + 'backward-paragraph) + (define-key texinfo-mode-map "\C-cn" + 'forward-paragraph))) +@end example + +@node Minibuffer Maps +@subsection Minibuffer Keymaps + +@cindex minibuffer keymaps +@vindex minibuffer-local-map +@vindex minibuffer-local-ns-map +@vindex minibuffer-local-completion-map +@vindex minibuffer-local-must-match-map +@vindex minibuffer-local-filename-completion-map +@vindex minibuffer-local-must-match-filename-map + The minibuffer has its own set of local keymaps; they contain various +completion and exit commands. + +@itemize @bullet +@item +@code{minibuffer-local-map} is used for ordinary input (no completion). +@item +@code{minibuffer-local-ns-map} is similar, except that @key{SPC} exits +just like @key{RET}. This is used mainly for Mocklisp compatibility. +@item +@code{minibuffer-local-completion-map} is for permissive completion. +@item +@code{minibuffer-local-must-match-map} is for strict completion and +for cautious completion. +@item +Finally, @code{minibuffer-local-filename-completion-map} and +@code{minibuffer-local-must-match-filename-map} are like the two +previous ones, but they are specifically for file name completion. +They do not bind @key{SPC}. +@end itemize + +@node Rebinding +@subsection Changing Key Bindings Interactively +@cindex key rebinding, this session +@cindex redefining keys, this session + + The way to redefine an Emacs key is to change its entry in a keymap. +You can change the global keymap, in which case the change is effective in +all major modes (except those that have their own overriding local +definitions for the same key). Or you can change the current buffer's +local map, which affects all buffers using the same major mode. + +@findex global-set-key +@findex local-set-key +@findex global-unset-key +@findex local-unset-key +@table @kbd +@item M-x global-set-key @key{RET} @var{key} @var{cmd} @key{RET} +Define @var{key} globally to run @var{cmd}. +@item M-x local-set-key @key{RET} @var{key} @var{cmd} @key{RET} +Define @var{key} locally (in the major mode now in effect) to run +@var{cmd}. +@item M-x global-unset-key @key{RET} @var{key} +Make @var{key} undefined in the global map. +@item M-x local-unset-key @key{RET} @var{key} +Make @var{key} undefined locally (in the major mode now in effect). +@end table + + For example, suppose you like to execute commands in a subshell within +an Emacs buffer, instead of suspending Emacs and executing commands in +your login shell. Normally, @kbd{C-z} is bound to the function +@code{suspend-emacs} (when not using the X Window System), but you can +change @kbd{C-z} to invoke an interactive subshell within Emacs, by +binding it to @code{shell} as follows: + +@example +M-x global-set-key @key{RET} C-z shell @key{RET} +@end example + +@noindent +@code{global-set-key} reads the command name after the key. After you +press the key, a message like this appears so that you can confirm that +you are binding the key you want: + +@example +Set key C-z to command: +@end example + + You can redefine function keys and mouse events in the same way; just +type the function key or click the mouse when it's time to specify the +key to rebind. + + You can rebind a key that contains more than one event in the same +way. Emacs keeps reading the key to rebind until it is a complete key +(that is, not a prefix key). Thus, if you type @kbd{C-f} for +@var{key}, that's the end; it enters the minibuffer immediately to +read @var{cmd}. But if you type @kbd{C-x}, since that's a prefix, it +reads another character; if that is @kbd{4}, another prefix character, +it reads one more character, and so on. For example, + +@example +M-x global-set-key @key{RET} C-x 4 $ spell-other-window @key{RET} +@end example + +@noindent +redefines @kbd{C-x 4 $} to run the (fictitious) command +@code{spell-other-window}. + + The two-character keys consisting of @kbd{C-c} followed by a letter +are reserved for user customizations. Lisp programs are not supposed to +define these keys, so the bindings you make for them will be available +in all major modes and will never get in the way of anything. + + You can remove the global definition of a key with +@code{global-unset-key}. This makes the key @dfn{undefined}; if you +type it, Emacs will just beep. Similarly, @code{local-unset-key} makes +a key undefined in the current major mode keymap, which makes the global +definition (or lack of one) come back into effect in that major mode. + + If you have redefined (or undefined) a key and you subsequently wish +to retract the change, undefining the key will not do the job---you need +to redefine the key with its standard definition. To find the name of +the standard definition of a key, go to a Fundamental mode buffer in a +fresh Emacs and use @kbd{C-h c}. The documentation of keys in this +manual also lists their command names. + + If you want to prevent yourself from invoking a command by mistake, it +is better to disable the command than to undefine the key. A disabled +command is less work to invoke when you really want to. +@xref{Disabling}. + +@node Init Rebinding +@subsection Rebinding Keys in Your Init File + + If you have a set of key bindings that you like to use all the time, +you can specify them in your @file{.emacs} file by using their Lisp +syntax. (@xref{Init File}.) + + The simplest method for doing this works for @acronym{ASCII} characters and +Meta-modified @acronym{ASCII} characters only. This method uses a string to +represent the key sequence you want to rebind. For example, here's how +to bind @kbd{C-z} to @code{shell}: + +@example +(global-set-key "\C-z" 'shell) +@end example + +@noindent +This example uses a string constant containing one character, +@kbd{C-z}. (@samp{\C-} is string syntax for a control character.) The +single-quote before the command name, @code{shell}, marks it as a +constant symbol rather than a variable. If you omit the quote, Emacs +would try to evaluate @code{shell} immediately as a variable. This +probably causes an error; it certainly isn't what you want. + + Here is another example that binds the key sequence @kbd{C-x M-l}: + +@example +(global-set-key "\C-x\M-l" 'make-symbolic-link) +@end example + + To put @key{TAB}, @key{RET}, @key{ESC}, or @key{DEL} in the +string, you can use the Emacs Lisp escape sequences, @samp{\t}, +@samp{\r}, @samp{\e}, and @samp{\d}. Here is an example which binds +@kbd{C-x @key{TAB}}: + +@example +(global-set-key "\C-x\t" 'indent-rigidly) +@end example + + These examples show how to write some other special @acronym{ASCII} characters +in strings for key bindings: + +@example +(global-set-key "\r" 'newline) ;; @key{RET} +(global-set-key "\d" 'delete-backward-char) ;; @key{DEL} +(global-set-key "\C-x\e\e" 'repeat-complex-command) ;; @key{ESC} +@end example + + When the key sequence includes function keys or mouse button events, +or non-@acronym{ASCII} characters such as @code{C-=} or @code{H-a}, you must use +the more general method of rebinding, which uses a vector to specify the +key sequence. + + The way to write a vector in Emacs Lisp is with square brackets around +the vector elements. Use spaces to separate the elements. If an +element is a symbol, simply write the symbol's name---no other +delimiters or punctuation are needed. If a vector element is a +character, write it as a Lisp character constant: @samp{?} followed by +the character as it would appear in a string. + + Here are examples of using vectors to rebind @kbd{C-=} (a control +character not in @acronym{ASCII}), @kbd{C-M-=} (not in @acronym{ASCII} because @kbd{C-=} +is not), @kbd{H-a} (a Hyper character; @acronym{ASCII} doesn't have Hyper at +all), @key{F7} (a function key), and @kbd{C-Mouse-1} (a +keyboard-modified mouse button): + +@example +(global-set-key [?\C-=] 'make-symbolic-link) +(global-set-key [?\M-\C-=] 'make-symbolic-link) +(global-set-key [?\H-a] 'make-symbolic-link) +(global-set-key [f7] 'make-symbolic-link) +(global-set-key [C-mouse-1] 'make-symbolic-link) +@end example + + You can use a vector for the simple cases too. Here's how to +rewrite the first six examples above to use vectors: + +@example +(global-set-key [?\C-z] 'shell) +(global-set-key [?\C-x ?l] 'make-symbolic-link) +(global-set-key [?\C-x ?\t] 'indent-rigidly) +(global-set-key [?\r] 'newline) +(global-set-key [?\d] 'delete-backward-char) +(global-set-key [?\C-x ?\e ?\e] 'repeat-complex-command) +@end example + +@noindent +As you see, you represent a multi-character key sequence with a vector +by listing all of the characters, in order, within the square brackets +that delimit the vector. + + Language and coding systems can cause problems with key bindings +for non-@acronym{ASCII} characters. @xref{Init Non-ASCII}. + +@node Function Keys +@subsection Rebinding Function Keys + + Key sequences can contain function keys as well as ordinary +characters. Just as Lisp characters (actually integers) represent +keyboard characters, Lisp symbols represent function keys. If the +function key has a word as its label, then that word is also the name of +the corresponding Lisp symbol. Here are the conventional Lisp names for +common function keys: + +@table @asis +@item @code{left}, @code{up}, @code{right}, @code{down} +Cursor arrow keys. + +@item @code{begin}, @code{end}, @code{home}, @code{next}, @code{prior} +Other cursor repositioning keys. + +@item @code{select}, @code{print}, @code{execute}, @code{backtab} +@itemx @code{insert}, @code{undo}, @code{redo}, @code{clearline} +@itemx @code{insertline}, @code{deleteline}, @code{insertchar}, @code{deletechar} +Miscellaneous function keys. + +@item @code{f1}, @code{f2}, @dots{} @code{f35} +Numbered function keys (across the top of the keyboard). + +@item @code{kp-add}, @code{kp-subtract}, @code{kp-multiply}, @code{kp-divide} +@itemx @code{kp-backtab}, @code{kp-space}, @code{kp-tab}, @code{kp-enter} +@itemx @code{kp-separator}, @code{kp-decimal}, @code{kp-equal} +Keypad keys (to the right of the regular keyboard), with names or punctuation. + +@item @code{kp-0}, @code{kp-1}, @dots{} @code{kp-9} +Keypad keys with digits. + +@item @code{kp-f1}, @code{kp-f2}, @code{kp-f3}, @code{kp-f4} +Keypad PF keys. +@end table + + These names are conventional, but some systems (especially when using +X) may use different names. To make certain what symbol is used for a +given function key on your terminal, type @kbd{C-h c} followed by that +key. + + A key sequence which contains function key symbols (or anything but +@acronym{ASCII} characters) must be a vector rather than a string. +Thus, to bind function key @samp{f1} to the command @code{rmail}, +write the following: + +@example +(global-set-key [f1] 'rmail) +@end example + +@noindent +To bind the right-arrow key to the command @code{forward-char}, you can +use this expression: + +@example +(global-set-key [right] 'forward-char) +@end example + +@noindent +This uses the Lisp syntax for a vector containing the symbol +@code{right}. (This binding is present in Emacs by default.) + + @xref{Init Rebinding}, for more information about using vectors for +rebinding. + + You can mix function keys and characters in a key sequence. This +example binds @kbd{C-x @key{NEXT}} to the command @code{forward-page}. + +@example +(global-set-key [?\C-x next] 'forward-page) +@end example + +@noindent +where @code{?\C-x} is the Lisp character constant for the character +@kbd{C-x}. The vector element @code{next} is a symbol and therefore +does not take a question mark. + + You can use the modifier keys @key{CTRL}, @key{META}, @key{HYPER}, +@key{SUPER}, @key{ALT} and @key{SHIFT} with function keys. To represent +these modifiers, add the strings @samp{C-}, @samp{M-}, @samp{H-}, +@samp{s-}, @samp{A-} and @samp{S-} at the front of the symbol name. +Thus, here is how to make @kbd{Hyper-Meta-@key{RIGHT}} move forward a +word: + +@example +(global-set-key [H-M-right] 'forward-word) +@end example + +@cindex keypad + Many keyboards have a ``numeric keypad'' on the right hand side. +The numeric keys in the keypad double up as cursor motion keys, +toggled by a key labeled @samp{Num Lock}. By default, Emacs +translates these keys to the corresponding keys in the main keyboard. +For example, when @samp{Num Lock} is on, the key labeled @samp{8} on +the numeric keypad produces @code{kp-8}, which is translated to +@kbd{8}; when @samp{Num Lock} is off, the same key produces +@code{kp-up}, which is translated to @key{UP}. If you rebind a key +such as @kbd{8} or @key{UP}, it affects the equivalent keypad key too. +However, if you rebind a @samp{kp-} key directly, that won't affect +its non-keypad equivalent. + + Emacs provides a convenient method for binding the numeric keypad +keys, using the variables @code{keypad-setup}, +@code{keypad-numlock-setup}, @code{keypad-shifted-setup}, and +@code{keypad-numlock-shifted-setup}. These can be found in the +@samp{keyboard} customization group (@pxref{Easy Customization}). You +can rebind the keys to perform other tasks, such as issuing numeric +prefix arguments. + +@node Named ASCII Chars +@subsection Named @acronym{ASCII} Control Characters + + @key{TAB}, @key{RET}, @key{BS}, @key{LFD}, @key{ESC} and @key{DEL} +started out as names for certain @acronym{ASCII} control characters, +used so often that they have special keys of their own. For instance, +@key{TAB} was another name for @kbd{C-i}. Later, users found it +convenient to distinguish in Emacs between these keys and the ``same'' +control characters typed with the @key{CTRL} key. Therefore, on most +modern terminals, they are no longer the same, and @key{TAB} is +distinguishable from @kbd{C-i}. + + Emacs can distinguish these two kinds of input if the keyboard does. +It treats the ``special'' keys as function keys named @code{tab}, +@code{return}, @code{backspace}, @code{linefeed}, @code{escape}, and +@code{delete}. These function keys translate automatically into the +corresponding @acronym{ASCII} characters @emph{if} they have no +bindings of their own. As a result, neither users nor Lisp programs +need to pay attention to the distinction unless they care to. + + If you do not want to distinguish between (for example) @key{TAB} and +@kbd{C-i}, make just one binding, for the @acronym{ASCII} character @key{TAB} +(octal code 011). If you do want to distinguish, make one binding for +this @acronym{ASCII} character, and another for the ``function key'' @code{tab}. + + With an ordinary @acronym{ASCII} terminal, there is no way to distinguish +between @key{TAB} and @kbd{C-i} (and likewise for other such pairs), +because the terminal sends the same character in both cases. + +@node Mouse Buttons +@subsection Rebinding Mouse Buttons +@cindex mouse button events +@cindex rebinding mouse buttons +@cindex click events +@cindex drag events +@cindex down events +@cindex button down events + + Emacs uses Lisp symbols to designate mouse buttons, too. The ordinary +mouse events in Emacs are @dfn{click} events; these happen when you +press a button and release it without moving the mouse. You can also +get @dfn{drag} events, when you move the mouse while holding the button +down. Drag events happen when you finally let go of the button. + + The symbols for basic click events are @code{mouse-1} for the leftmost +button, @code{mouse-2} for the next, and so on. Here is how you can +redefine the second mouse button to split the current window: + +@example +(global-set-key [mouse-2] 'split-window-vertically) +@end example + + The symbols for drag events are similar, but have the prefix +@samp{drag-} before the word @samp{mouse}. For example, dragging the +first button generates a @code{drag-mouse-1} event. + + You can also define bindings for events that occur when a mouse button +is pressed down. These events start with @samp{down-} instead of +@samp{drag-}. Such events are generated only if they have key bindings. +When you get a button-down event, a corresponding click or drag event +will always follow. + +@cindex double clicks +@cindex triple clicks + If you wish, you can distinguish single, double, and triple clicks. A +double click means clicking a mouse button twice in approximately the +same place. The first click generates an ordinary click event. The +second click, if it comes soon enough, generates a double-click event +instead. The event type for a double-click event starts with +@samp{double-}: for example, @code{double-mouse-3}. + + This means that you can give a special meaning to the second click at +the same place, but it must act on the assumption that the ordinary +single click definition has run when the first click was received. + + This constrains what you can do with double clicks, but user interface +designers say that this constraint ought to be followed in any case. A +double click should do something similar to the single click, only +``more so.'' The command for the double-click event should perform the +extra work for the double click. + + If a double-click event has no binding, it changes to the +corresponding single-click event. Thus, if you don't define a +particular double click specially, it executes the single-click command +twice. + + Emacs also supports triple-click events whose names start with +@samp{triple-}. Emacs does not distinguish quadruple clicks as event +types; clicks beyond the third generate additional triple-click events. +However, the full number of clicks is recorded in the event list, so +if you know Emacs Lisp you can distinguish if you really want to +(@pxref{Accessing Events,,, elisp, The Emacs Lisp Reference Manual}). +We don't recommend distinct meanings for more than three clicks, but +sometimes it is useful for subsequent clicks to cycle through the same +set of three meanings, so that four clicks are equivalent to one +click, five are equivalent to two, and six are equivalent to three. + + Emacs also records multiple presses in drag and button-down events. +For example, when you press a button twice, then move the mouse while +holding the button, Emacs gets a @samp{double-drag-} event. And at the +moment when you press it down for the second time, Emacs gets a +@samp{double-down-} event (which is ignored, like all button-down +events, if it has no binding). + +@vindex double-click-time + The variable @code{double-click-time} specifies how much time can +elapse between clicks and still allow them to be grouped as a multiple +click. Its value is in units of milliseconds. If the value is +@code{nil}, double clicks are not detected at all. If the value is +@code{t}, then there is no time limit. The default is 500. + +@vindex double-click-fuzz + The variable @code{double-click-fuzz} specifies how much the mouse +can move between clicks and still allow them to be grouped as a multiple +click. Its value is in units of pixels on windowed displays and in +units of 1/8 of a character cell on text-mode terminals; the default is +3. + + The symbols for mouse events also indicate the status of the modifier +keys, with the usual prefixes @samp{C-}, @samp{M-}, @samp{H-}, +@samp{s-}, @samp{A-} and @samp{S-}. These always precede @samp{double-} +or @samp{triple-}, which always precede @samp{drag-} or @samp{down-}. + + A frame includes areas that don't show text from the buffer, such as +the mode line and the scroll bar. You can tell whether a mouse button +comes from a special area of the screen by means of dummy ``prefix +keys.'' For example, if you click the mouse in the mode line, you get +the prefix key @code{mode-line} before the ordinary mouse-button symbol. +Thus, here is how to define the command for clicking the first button in +a mode line to run @code{scroll-up}: + +@example +(global-set-key [mode-line mouse-1] 'scroll-up) +@end example + + Here is the complete list of these dummy prefix keys and their +meanings: + +@table @code +@item mode-line +The mouse was in the mode line of a window. +@item vertical-line +The mouse was in the vertical line separating side-by-side windows. (If +you use scroll bars, they appear in place of these vertical lines.) +@item vertical-scroll-bar +The mouse was in a vertical scroll bar. (This is the only kind of +scroll bar Emacs currently supports.) +@item menu-bar +The mouse was in the menu bar. +@item header-line +The mouse was in a header line. +@ignore +@item horizontal-scroll-bar +The mouse was in a horizontal scroll bar. Horizontal scroll bars do +horizontal scrolling, and people don't use them often. +@end ignore +@end table + + You can put more than one mouse button in a key sequence, but it isn't +usual to do so. + +@node Disabling +@subsection Disabling Commands +@cindex disabled command + + Disabling a command means that invoking it interactively asks for +confirmation from the user. The purpose of disabling a command is to +prevent users from executing it by accident; we do this for commands +that might be confusing to the uninitiated. + + Attempting to invoke a disabled command interactively in Emacs +displays a window containing the command's name, its documentation, +and some instructions on what to do immediately; then Emacs asks for +input saying whether to execute the command as requested, enable it +and execute it, or cancel. If you decide to enable the command, you +must then answer another question---whether to do this permanently, or +just for the current session. (Enabling permanently works by +automatically editing your @file{.emacs} file.) You can also type +@kbd{!} to enable @emph{all} commands, for the current session only. + + The direct mechanism for disabling a command is to put a +non-@code{nil} @code{disabled} property on the Lisp symbol for the +command. Here is the Lisp program to do this: + +@example +(put 'delete-region 'disabled t) +@end example + + If the value of the @code{disabled} property is a string, that string +is included in the message displayed when the command is used: + +@example +(put 'delete-region 'disabled + "It's better to use `kill-region' instead.\n") +@end example + +@findex disable-command +@findex enable-command + You can make a command disabled either by editing the @file{.emacs} +file directly, or with the command @kbd{M-x disable-command}, which edits +the @file{.emacs} file for you. Likewise, @kbd{M-x enable-command} +edits @file{.emacs} to enable a command permanently. @xref{Init File}. + + If Emacs was invoked with the @option{-q} or @option{--no-init-file} +options (@pxref{Initial Options}), it will not edit your +@file{~/.emacs} init file. Doing so could lose information +because Emacs has not read your init file. + + Whether a command is disabled is independent of what key is used to +invoke it; disabling also applies if the command is invoked using +@kbd{M-x}. However, disabling a command has no effect on calling it +as a function from Lisp programs. + +@node Syntax +@section The Syntax Table +@cindex syntax table + + All the Emacs commands which parse words or balance parentheses are +controlled by the @dfn{syntax table}. The syntax table says which +characters are opening delimiters, which are parts of words, which are +string quotes, and so on. It does this by assigning each character to +one of fifteen-odd @dfn{syntax classes}. In some cases it specifies +some additional information also. + + Each major mode has its own syntax table (though related major modes +sometimes share one syntax table), which it installs in each buffer +that uses the mode. The syntax table installed in the current buffer +is the one that all commands use, so we call it ``the'' syntax table. + +@kindex C-h s +@findex describe-syntax + To display a description of the contents of the current syntax +table, type @kbd{C-h s} (@code{describe-syntax}). The description of +each character includes the string you would have to give to +@code{modify-syntax-entry} to set up that character's current syntax, +starting with the character which designates its syntax class, plus +some English text to explain its meaning. + + A syntax table is actually a Lisp object, a char-table, whose +elements are cons cells. For full information on the syntax table, +see @ref{Syntax Tables,, Syntax Tables, elisp, The Emacs Lisp +Reference Manual}. + +@node Init File +@section The Init File, @file{~/.emacs} +@cindex init file +@cindex Emacs initialization file +@cindex key rebinding, permanent +@cindex rebinding keys, permanently +@cindex startup (init file) + + When Emacs is started, it normally loads a Lisp program from the file +@file{.emacs} or @file{.emacs.el} in your home directory (@pxref{Find Init}). +We call this file your @dfn{init file} because it specifies how to +initialize Emacs for you. You can use the command line switch +@samp{-q} to prevent loading your init file, and @samp{-u} (or +@samp{--user}) to specify a different user's init file (@pxref{Initial +Options}). + + You can also use @file{~/.emacs.d/init.el} as the init file. Emacs +tries this if it cannot find @file{~/.emacs} or @file{~/.emacs.el}. + +@cindex @file{default.el}, the default init file + There can also be a @dfn{default init file}, which is the library +named @file{default.el}, found via the standard search path for +libraries. The Emacs distribution contains no such library; your site +may create one for local customizations. If this library exists, it is +loaded whenever you start Emacs (except when you specify @samp{-q}). +But your init file, if any, is loaded first; if it sets +@code{inhibit-default-init} non-@code{nil}, then @file{default} is not +loaded. + +@cindex site init file +@cindex @file{site-start.el}, the site startup file + Your site may also have a @dfn{site startup file}; this is named +@file{site-start.el}, if it exists. Like @file{default.el}, Emacs +finds this file via the standard search path for Lisp libraries. +Emacs loads this library before it loads your init file. To inhibit +loading of this library, use the option @samp{--no-site-file}. +@xref{Initial Options}. We recommend against using +@file{site-start.el} for changes that some users may not like. It is +better to put them in @file{default.el}, so that users can more easily +override them. + + You can place @file{default.el} and @file{site-start.el} in any of +the directories which Emacs searches for Lisp libraries. The variable +@code{load-path} (@pxref{Lisp Libraries}) specifies these directories. +Many sites put these files in the @file{site-lisp} subdirectory of the +Emacs installation directory, typically +@file{/usr/local/share/emacs/site-lisp}. + + If you have a large amount of code in your @file{.emacs} file, you +should rename it to @file{~/.emacs.el}, and byte-compile it. @xref{Byte +Compilation,, Byte Compilation, elisp, the Emacs Lisp Reference Manual}, +for more information about compiling Emacs Lisp programs. + + If you are going to write actual Emacs Lisp programs that go beyond +minor customization, you should read the @cite{Emacs Lisp Reference Manual}. +@ifnottex +@xref{Top, Emacs Lisp, Emacs Lisp, elisp, the Emacs Lisp Reference +Manual}. +@end ifnottex + +@menu +* Init Syntax:: Syntax of constants in Emacs Lisp. +* Init Examples:: How to do some things with an init file. +* Terminal Init:: Each terminal type can have an init file. +* Find Init:: How Emacs finds the init file. +* Init Non-ASCII:: Using non-@acronym{ASCII} characters in an init file. +@end menu + +@node Init Syntax +@subsection Init File Syntax + + The @file{.emacs} file contains one or more Lisp function call +expressions. Each of these consists of a function name followed by +arguments, all surrounded by parentheses. For example, @code{(setq +fill-column 60)} calls the function @code{setq} to set the variable +@code{fill-column} (@pxref{Filling}) to 60. + + You can set any Lisp variable with @code{setq}, but with certain +variables @code{setq} won't do what you probably want in the +@file{.emacs} file. Some variables automatically become buffer-local +when set with @code{setq}; what you want in @file{.emacs} is to set +the default value, using @code{setq-default}. Some customizable minor +mode variables do special things to enable the mode when you set them +with Customize, but ordinary @code{setq} won't do that; to enable the +mode in your @file{.emacs} file, call the minor mode command. The +following section has examples of both of these methods. + + The second argument to @code{setq} is an expression for the new +value of the variable. This can be a constant, a variable, or a +function call expression. In @file{.emacs}, constants are used most +of the time. They can be: + +@table @asis +@item Numbers: +Numbers are written in decimal, with an optional initial minus sign. + +@item Strings: +@cindex Lisp string syntax +@cindex string syntax +Lisp string syntax is the same as C string syntax with a few extra +features. Use a double-quote character to begin and end a string constant. + +In a string, you can include newlines and special characters literally. +But often it is cleaner to use backslash sequences for them: @samp{\n} +for newline, @samp{\b} for backspace, @samp{\r} for carriage return, +@samp{\t} for tab, @samp{\f} for formfeed (control-L), @samp{\e} for +escape, @samp{\\} for a backslash, @samp{\"} for a double-quote, or +@samp{\@var{ooo}} for the character whose octal code is @var{ooo}. +Backslash and double-quote are the only characters for which backslash +sequences are mandatory. + +@samp{\C-} can be used as a prefix for a control character, as in +@samp{\C-s} for @acronym{ASCII} control-S, and @samp{\M-} can be used as a prefix for +a Meta character, as in @samp{\M-a} for @kbd{Meta-A} or @samp{\M-\C-a} for +@kbd{Control-Meta-A}.@refill + +@xref{Init Non-ASCII}, for information about including +non-@acronym{ASCII} in your init file. + +@item Characters: +Lisp character constant syntax consists of a @samp{?} followed by +either a character or an escape sequence starting with @samp{\}. +Examples: @code{?x}, @code{?\n}, @code{?\"}, @code{?\)}. Note that +strings and characters are not interchangeable in Lisp; some contexts +require one and some contexts require the other. + +@xref{Init Non-ASCII}, for information about binding commands to +keys which send non-@acronym{ASCII} characters. + +@item True: +@code{t} stands for `true'. + +@item False: +@code{nil} stands for `false'. + +@item Other Lisp objects: +Write a single-quote (@code{'}) followed by the Lisp object you want. +@end table + +@node Init Examples +@subsection Init File Examples + + Here are some examples of doing certain commonly desired things with +Lisp expressions: + +@itemize @bullet +@item +Make @key{TAB} in C mode just insert a tab if point is in the middle of a +line. + +@example +(setq c-tab-always-indent nil) +@end example + +Here we have a variable whose value is normally @code{t} for `true' +and the alternative is @code{nil} for `false'. + +@item +Make searches case sensitive by default (in all buffers that do not +override this). + +@example +(setq-default case-fold-search nil) +@end example + +This sets the default value, which is effective in all buffers that do +not have local values for the variable. Setting @code{case-fold-search} +with @code{setq} affects only the current buffer's local value, which +is not what you probably want to do in an init file. + +@item +@vindex user-mail-address +Specify your own email address, if Emacs can't figure it out correctly. + +@example +(setq user-mail-address "rumsfeld@@torture.gov") +@end example + +Various Emacs packages that need your own email address use the value of +@code{user-mail-address}. + +@item +Make Text mode the default mode for new buffers. + +@example +(setq default-major-mode 'text-mode) +@end example + +Note that @code{text-mode} is used because it is the command for +entering Text mode. The single-quote before it makes the symbol a +constant; otherwise, @code{text-mode} would be treated as a variable +name. + +@need 1500 +@item +Set up defaults for the Latin-1 character set +which supports most of the languages of Western Europe. + +@example +(set-language-environment "Latin-1") +@end example + +@need 1500 +@item +Turn off Line Number mode, a global minor mode. + +@example +(line-number-mode 0) +@end example + +@need 1500 +@item +Turn on Auto Fill mode automatically in Text mode and related modes. + +@example +(add-hook 'text-mode-hook + '(lambda () (auto-fill-mode 1))) +@end example + +This shows how to add a hook function to a normal hook variable +(@pxref{Hooks}). The function we supply is a list starting with +@code{lambda}, with a single-quote in front of it to make it a list +constant rather than an expression. + +It's beyond the scope of this manual to explain Lisp functions, but for +this example it is enough to know that the effect is to execute +@code{(auto-fill-mode 1)} when Text mode is entered. You can replace +that with any other expression that you like, or with several +expressions in a row. + +Emacs comes with a function named @code{turn-on-auto-fill} whose +definition is @code{(lambda () (auto-fill-mode 1))}. Thus, a simpler +way to write the above example is as follows: + +@example +(add-hook 'text-mode-hook 'turn-on-auto-fill) +@end example + +@item +Load the installed Lisp library named @file{foo} (actually a file +@file{foo.elc} or @file{foo.el} in a standard Emacs directory). + +@example +(load "foo") +@end example + +When the argument to @code{load} is a relative file name, not starting +with @samp{/} or @samp{~}, @code{load} searches the directories in +@code{load-path} (@pxref{Lisp Libraries}). + +@item +Load the compiled Lisp file @file{foo.elc} from your home directory. + +@example +(load "~/foo.elc") +@end example + +Here an absolute file name is used, so no searching is done. + +@item +@cindex loading Lisp libraries automatically +@cindex autoload Lisp libraries +Tell Emacs to find the definition for the function @code{myfunction} +by loading a Lisp library named @file{mypackage} (i.e.@: a file +@file{mypackage.elc} or @file{mypackage.el}): + +@example +(autoload 'myfunction "mypackage" "Do what I say." t) +@end example + +@noindent +Here the string @code{"Do what I say."} is the function's +documentation string. You specify it in the @code{autoload} +definition so it will be available for help commands even when the +package is not loaded. The last argument, @code{t}, indicates that +this function is interactive; that is, it can be invoked interactively +by typing @kbd{M-x myfunction @key{RET}} or by binding it to a key. +If the function is not interactive, omit the @code{t} or use +@code{nil}. + +@item +Rebind the key @kbd{C-x l} to run the function @code{make-symbolic-link} +(@pxref{Init Rebinding}). + +@example +(global-set-key "\C-xl" 'make-symbolic-link) +@end example + +or + +@example +(define-key global-map "\C-xl" 'make-symbolic-link) +@end example + +Note once again the single-quote used to refer to the symbol +@code{make-symbolic-link} instead of its value as a variable. + +@item +Do the same thing for Lisp mode only. + +@example +(define-key lisp-mode-map "\C-xl" 'make-symbolic-link) +@end example + +@item +Redefine all keys which now run @code{next-line} in Fundamental mode +so that they run @code{forward-line} instead. + +@findex substitute-key-definition +@example +(substitute-key-definition 'next-line 'forward-line + global-map) +@end example + +@item +Make @kbd{C-x C-v} undefined. + +@example +(global-unset-key "\C-x\C-v") +@end example + +One reason to undefine a key is so that you can make it a prefix. +Simply defining @kbd{C-x C-v @var{anything}} will make @kbd{C-x C-v} a +prefix, but @kbd{C-x C-v} must first be freed of its usual non-prefix +definition. + +@item +Make @samp{$} have the syntax of punctuation in Text mode. +Note the use of a character constant for @samp{$}. + +@example +(modify-syntax-entry ?\$ "." text-mode-syntax-table) +@end example + +@item +Enable the use of the command @code{narrow-to-region} without confirmation. + +@example +(put 'narrow-to-region 'disabled nil) +@end example + +@item +Adjusting the configuration to various platforms and Emacs versions. + +Users typically want Emacs to behave the same on all systems, so the +same init file is right for all platforms. However, sometimes it +happens that a function you use for customizing Emacs is not available +on some platforms or in older Emacs versions. To deal with that +situation, put the customization inside a conditional that tests whether +the function or facility is available, like this: + +@example +(if (fboundp 'blink-cursor-mode) + (blink-cursor-mode 0)) + +(if (boundp 'coding-category-utf-8) + (set-coding-priority '(coding-category-utf-8))) +@end example + +@noindent +You can also simply disregard the errors that occur if the +function is not defined. + +@example +(condition case () + (set-face-background 'region "grey75") + (error nil)) +@end example + +A @code{setq} on a variable which does not exist is generally +harmless, so those do not need a conditional. +@end itemize + +@node Terminal Init +@subsection Terminal-specific Initialization + + Each terminal type can have a Lisp library to be loaded into Emacs when +it is run on that type of terminal. For a terminal type named +@var{termtype}, the library is called @file{term/@var{termtype}} and it is +found by searching the directories @code{load-path} as usual and trying the +suffixes @samp{.elc} and @samp{.el}. Normally it appears in the +subdirectory @file{term} of the directory where most Emacs libraries are +kept.@refill + + The usual purpose of the terminal-specific library is to map the +escape sequences used by the terminal's function keys onto more +meaningful names, using @code{function-key-map}. See the file +@file{term/lk201.el} for an example of how this is done. Many function +keys are mapped automatically according to the information in the +Termcap data base; the terminal-specific library needs to map only the +function keys that Termcap does not specify. + + When the terminal type contains a hyphen, only the part of the name +before the first hyphen is significant in choosing the library name. +Thus, terminal types @samp{aaa-48} and @samp{aaa-30-rv} both use +the library @file{term/aaa}. The code in the library can use +@code{(getenv "TERM")} to find the full terminal type name.@refill + +@vindex term-file-prefix + The library's name is constructed by concatenating the value of the +variable @code{term-file-prefix} and the terminal type. Your @file{.emacs} +file can prevent the loading of the terminal-specific library by setting +@code{term-file-prefix} to @code{nil}. + +@vindex term-setup-hook + Emacs runs the hook @code{term-setup-hook} at the end of +initialization, after both your @file{.emacs} file and any +terminal-specific library have been read in. Add hook functions to this +hook if you wish to override part of any of the terminal-specific +libraries and to define initializations for terminals that do not have a +library. @xref{Hooks}. + +@node Find Init +@subsection How Emacs Finds Your Init File + + Normally Emacs uses the environment variable @env{HOME} +(@pxref{General Variables, HOME}) to find @file{.emacs}; that's what +@samp{~} means in a file name. If @file{.emacs} is not found inside +@file{~/} (nor @file{.emacs.el}), Emacs looks for +@file{~/.emacs.d/init.el} (which, like @file{~/.emacs.el}, can be +byte-compiled). + + However, if you run Emacs from a shell started by @code{su}, Emacs +tries to find your own @file{.emacs}, not that of the user you are +currently pretending to be. The idea is that you should get your own +editor customizations even if you are running as the super user. + + More precisely, Emacs first determines which user's init file to use. +It gets your user name from the environment variables @env{LOGNAME} and +@env{USER}; if neither of those exists, it uses effective user-ID. +If that user name matches the real user-ID, then Emacs uses @env{HOME}; +otherwise, it looks up the home directory corresponding to that user +name in the system's data base of users. +@c LocalWords: backtab + +@node Init Non-ASCII +@subsection Non-@acronym{ASCII} Characters in Init Files +@cindex international characters in @file{.emacs} +@cindex non-@acronym{ASCII} characters in @file{.emacs} +@cindex non-@acronym{ASCII} keys, binding +@cindex rebinding non-@acronym{ASCII} keys + + Language and coding systems may cause problems if your init file +contains non-@acronym{ASCII} characters, such as accented letters, in +strings or key bindings. + + If you want to use non-@acronym{ASCII} characters in your init file, +you should put a @w{@samp{-*-coding: @var{coding-system}-*-}} tag on +the first line of the init file, and specify a coding system that +supports the character(s) in question. @xref{Recognize Coding}. This +is because the defaults for decoding non-@acronym{ASCII} text might +not yet be set up by the time Emacs reads those parts of your init +file which use such strings, possibly leading Emacs to decode those +strings incorrectly. You should then avoid adding Emacs Lisp code +that modifies the coding system in other ways, such as calls to +@code{set-language-environment}. + + To bind non-@acronym{ASCII} keys, you must use a vector (@pxref{Init +Rebinding}). The string syntax cannot be used, since the +non-@acronym{ASCII} characters will be interpreted as meta keys. For +instance: + +@example +(global-set-key [?@var{char}] 'some-function) +@end example + +@noindent +Type @kbd{C-q}, followed by the key you want to bind, to insert @var{char}. + + @strong{Warning:} if you change the keyboard encoding, or change +between multibyte and unibyte mode, or anything that would alter which +code @kbd{C-q} would insert for that character, this keybinding may +stop working. It is therefore advisable to use one and only one +coding system, for your init file as well as the files you edit. For +example, don't mix the @samp{latin-1} and @samp{latin-9} coding +systems. + +@ignore + arch-tag: c68abddb-4410-4fb5-925f-63394e971d93 +@end ignore diff --git a/doc/emacs/dired-xtra.texi b/doc/emacs/dired-xtra.texi new file mode 100644 index 00000000000..e8fdf8ab468 --- /dev/null +++ b/doc/emacs/dired-xtra.texi @@ -0,0 +1,49 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@c +@c This file is included either in emacs-xtra.texi (when producing the +@c printed version) or in the main Emacs manual (for the on-line version). +@node Subdir Switches +@section Subdirectory Switches in Dired + +You can insert subdirectories with specified @code{ls} switches in +Dired buffers, using @kbd{C-u i}. You can change the @code{ls} +switches of an already inserted subdirectory using @kbd{C-u l}. + +In Emacs versions 22.1 and later, Dired remembers the switches, so +that reverting the buffer will not change them back to the main +directory's switches. Deleting a subdirectory forgets about its +switches. + +Using @code{dired-undo} (usually bound to @kbd{C-_} and @kbd{C-x u}) +to reinsert or delete subdirectories, that were inserted with explicit +switches, can bypass Dired's machinery for remembering (or forgetting) +switches. Deleting a subdirectory using @code{dired-undo} does not +forget its switches. When later reinserted using @kbd{i}, it will be +reinserted using its old switches. Using @code{dired-undo} to +reinsert a subdirectory that was deleted using the regular +Dired commands (not @code{dired-undo}) will originally insert it with +its old switches. However, reverting the buffer will relist it using +the buffer's default switches. If any of this yields problems, you +can easily correct the situation using @kbd{C-u i} or @kbd{C-u l}. + +Dired does not remember the @code{R} switch. Inserting a subdirectory +with switches that include the @code{R} switch is equivalent with +inserting each of its subdirectories using all remaining switches. +For instance, updating or killing a subdirectory that was inserted +with the @code{R} switch will not update or kill its subdirectories. + +The buffer's default switches do not affect subdirectories that were +inserted using explicitly specified switches. In particular, +commands such as @kbd{s}, that change the buffer's switches do not +affect such subdirectories. (They do affect subdirectories without +explicitly assigned switches, however.) + +You can make Dired forget about all subdirectory switches and relist +all subdirectories with the buffer's default switches using +@kbd{M-x dired-reset-subdir-switches}. This also reverts the Dired buffer. + +@ignore + arch-tag: e3865701-9179-4ffb-bc34-d321111c688d +@end ignore diff --git a/doc/emacs/dired.texi b/doc/emacs/dired.texi new file mode 100644 index 00000000000..3dda3f588eb --- /dev/null +++ b/doc/emacs/dired.texi @@ -0,0 +1,1317 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Dired, Calendar/Diary, Rmail, Top +@chapter Dired, the Directory Editor +@cindex Dired +@cindex file management + + Dired makes an Emacs buffer containing a listing of a directory, and +optionally some of its subdirectories as well. You can use the normal +Emacs commands to move around in this buffer, and special Dired commands +to operate on the files listed. + + The Dired buffer is ``read-only,'' and inserting text in it is not +useful, so ordinary printing characters such as @kbd{d} and @kbd{x} +are redefined for special Dired commands. Some Dired commands +@dfn{mark} or @dfn{flag} the @dfn{current file} (that is, the file on +the current line); other commands operate on the marked files or on +the flagged files. You first mark certain files in order to operate +on all of them with on command. + + The Dired-X package provides various extra features for Dired mode. +@xref{Top, Dired-X,,dired-x, Dired Extra Version 2 User's Manual}. + +@menu +* Enter: Dired Enter. How to invoke Dired. +* Navigation: Dired Navigation. Special motion commands in the Dired buffer. +* Deletion: Dired Deletion. Deleting files with Dired. +* Flagging Many Files:: Flagging files based on their names. +* Visit: Dired Visiting. Other file operations through Dired. +* Marks vs Flags:: Flagging for deletion vs marking. +* Operating on Files:: How to copy, rename, print, compress, etc. + either one file or several files. +* Shell Commands in Dired:: Running a shell command on the marked files. +* Transforming File Names:: Using patterns to rename multiple files. +* Comparison in Dired:: Running `diff' by way of Dired. +* Subdirectories in Dired:: Adding subdirectories to the Dired buffer. +@ifnottex +* Subdir Switches:: Subdirectory switches in Dired. +@end ifnottex +* Subdirectory Motion:: Moving across subdirectories, and up and down. +* Hiding Subdirectories:: Making subdirectories visible or invisible. +* Updating: Dired Updating. Discarding lines for files of no interest. +* Find: Dired and Find. Using `find' to choose the files for Dired. +* Wdired:: Operating on files by editing the Dired buffer. +* Image-Dired:: Viewing image thumbnails in Dired +* Misc: Misc Dired Features. Various other features. +@end menu + +@node Dired Enter +@section Entering Dired + +@findex dired +@kindex C-x d +@vindex dired-listing-switches + To invoke Dired, do @kbd{C-x d} or @kbd{M-x dired}. The command +reads a directory name or wildcard file name pattern as a minibuffer +argument to specify the files to list. @kbd{C-x C-f} given a +directory name also invokes Dired. Where @code{dired} differs from +@code{list-directory} is that it puts the buffer into Dired mode, so +that the special commands of Dired are available. + + The variable @code{dired-listing-switches} specifies the options to +give to @code{ls} for listing the directory; this string @emph{must} +contain @samp{-l}. If you use a numeric prefix argument with the +@code{dired} command, you can specify the @code{ls} switches with the +minibuffer before you enter the directory specification. No matter +how they are specified, the @code{ls} switches can include short +options (that is, single characters) requiring no arguments, and long +options (starting with @samp{--}) whose arguments are specified with +@samp{=}. + + On MS-Windows and MS-DOS systems, Emacs @emph{emulates} @code{ls}; +see @ref{ls in Lisp}, for options and peculiarities of that emulation. + + +@findex dired-other-window +@kindex C-x 4 d +@findex dired-other-frame +@kindex C-x 5 d + To display the Dired buffer in another window rather than in the +selected window, use @kbd{C-x 4 d} (@code{dired-other-window}) instead +of @kbd{C-x d}. @kbd{C-x 5 d} (@code{dired-other-frame}) uses a +separate frame to display the Dired buffer. + +@node Dired Navigation +@section Navigation in the Dired Buffer + +@kindex C-n @r{(Dired)} +@kindex C-p @r{(Dired)} + All the usual Emacs cursor motion commands are available in Dired +buffers. The keys @kbd{C-n} and @kbd{C-p} are redefined to put the +cursor at the beginning of the file name on the line, rather than at +the beginning of the line. + +@kindex SPC @r{(Dired)} + For extra convenience, @key{SPC} and @kbd{n} in Dired are equivalent +to @kbd{C-n}. @kbd{p} is equivalent to @kbd{C-p}. (Moving by lines is +so common in Dired that it deserves to be easy to type.) @key{DEL} +(move up and unflag) is often useful simply for moving up. + +@findex dired-goto-file +@kindex j @r{(Dired)} + @kbd{j} (@code{dired-goto-file}) moves point to the line that +describes a specified file or directory. + + Some additional navigation commands are available when the Dired +buffer includes several directories. @xref{Subdirectory Motion}. + +@node Dired Deletion +@section Deleting Files with Dired +@cindex flagging files (in Dired) +@cindex deleting files (in Dired) + + One of the most frequent uses of Dired is to first @dfn{flag} files for +deletion, then delete the files that were flagged. + +@table @kbd +@item d +Flag this file for deletion. +@item u +Remove deletion flag on this line. +@item @key{DEL} +Move point to previous line and remove the deletion flag on that line. +@item x +Delete the files that are flagged for deletion. +@end table + +@kindex d @r{(Dired)} +@findex dired-flag-file-deletion + You can flag a file for deletion by moving to the line describing +the file and typing @kbd{d} (@code{dired-flag-file-deletion}). The +deletion flag is visible as a @samp{D} at the beginning of the line. +This command moves point to the next line, so that repeated @kbd{d} +commands flag successive files. A numeric argument serves as a repeat +count. + +@kindex u @r{(Dired deletion)} +@kindex DEL @r{(Dired)} + The reason for flagging files for deletion, rather than deleting +files immediately, is to reduce the danger of deleting a file +accidentally. Until you direct Dired to delete the flagged files, you +can remove deletion flags using the commands @kbd{u} and @key{DEL}. +@kbd{u} (@code{dired-unmark}) works just like @kbd{d}, but removes +flags rather than making flags. @key{DEL} +(@code{dired-unmark-backward}) moves upward, removing flags; it is +like @kbd{u} with argument @minus{}1. + +@kindex x @r{(Dired)} +@findex dired-do-flagged-delete +@cindex expunging (Dired) + To delete the flagged files, type @kbd{x} +(@code{dired-do-flagged-delete}). (This is also known as +@dfn{expunging}.) This command first displays a list of all the file +names flagged for deletion, and requests confirmation with @kbd{yes}. +If you confirm, Dired deletes the flagged files, then deletes their +lines from the text of the Dired buffer. The Dired buffer, with +somewhat fewer lines, remains selected. + + If you answer @kbd{no} or quit with @kbd{C-g} when asked to confirm, you +return immediately to Dired, with the deletion flags still present in +the buffer, and no files actually deleted. + +@cindex recursive deletion +@vindex dired-recursive-deletes + You can delete empty directories just like other files, but normally +Dired cannot delete directories that are nonempty. If the variable +@code{dired-recursive-deletes} is non-@code{nil}, then Dired can +delete nonempty directories including all their contents. That can +be somewhat risky. + +@node Flagging Many Files +@section Flagging Many Files at Once +@cindex flagging many files for deletion (in Dired) + +@table @kbd +@item # +Flag all auto-save files (files whose names start and end with @samp{#}) +for deletion (@pxref{Auto Save}). + +@item ~ +Flag all backup files (files whose names end with @samp{~}) for deletion +(@pxref{Backup}). + +@item & +Flag for deletion all files with certain kinds of names which suggest +you could easily create those files again. + +@item .@: @r{(Period)} +Flag excess numeric backup files for deletion. The oldest and newest +few backup files of any one file are exempt; the middle ones are +flagged. + +@item % d @var{regexp} @key{RET} +Flag for deletion all files whose names match the regular expression +@var{regexp}. +@end table + + The @kbd{#}, @kbd{~}, @kbd{&}, and @kbd{.} commands flag many files for +deletion, based on their file names. These commands are useful +precisely because they do not themselves delete any files; you can +remove the deletion flags from any flagged files that you really wish to +keep.@refill + +@kindex & @r{(Dired)} +@findex dired-flag-garbage-files +@vindex dired-garbage-files-regexp +@cindex deleting some backup files + @kbd{&} (@code{dired-flag-garbage-files}) flags files whose names +match the regular expression specified by the variable +@code{dired-garbage-files-regexp}. By default, this matches certain +files produced by @TeX{}, @samp{.bak} files, and the @samp{.orig} and +@samp{.rej} files produced by @code{patch}. + +@kindex # @r{(Dired)} +@findex dired-flag-auto-save-files +@cindex deleting auto-save files + @kbd{#} (@code{dired-flag-auto-save-files}) flags for deletion all +files whose names look like auto-save files---that is, files whose +names begin and end with @samp{#}. @xref{Auto Save}. + +@kindex ~ @r{(Dired)} +@findex dired-flag-backup-files + @kbd{~} (@code{dired-flag-backup-files}) flags for deletion all +files whose names say they are backup files---that is, files whose +names end in @samp{~}. @xref{Backup}. + +@kindex . @r{(Dired)} +@vindex dired-kept-versions +@findex dired-clean-directory + @kbd{.} (period, @code{dired-clean-directory}) flags just some of the +backup files for deletion: all but the oldest few and newest few backups +of any one file. Normally @code{dired-kept-versions} (@strong{not} +@code{kept-new-versions}; that applies only when saving) specifies the +number of newest versions of each file to keep, and +@code{kept-old-versions} specifies the number of oldest versions to +keep. + + Period with a positive numeric argument, as in @kbd{C-u 3 .}, +specifies the number of newest versions to keep, overriding +@code{dired-kept-versions}. A negative numeric argument overrides +@code{kept-old-versions}, using minus the value of the argument to +specify the number of oldest versions of each file to keep. + +@findex dired-flag-files-regexp +@kindex % d @r{(Dired)} + The @kbd{% d} command flags all files whose names match a specified +regular expression (@code{dired-flag-files-regexp}). Only the +non-directory part of the file name is used in matching. You can use +@samp{^} and @samp{$} to anchor matches. You can exclude certain +subdirectories from marking by hiding them while you use @kbd{% d}. +@xref{Hiding Subdirectories}. + +@node Dired Visiting +@section Visiting Files in Dired + + There are several Dired commands for visiting or examining the files +listed in the Dired buffer. All of them apply to the current line's +file; if that file is really a directory, these commands invoke Dired on +that subdirectory (making a separate Dired buffer). + +@table @kbd +@item f +@kindex f @r{(Dired)} +@findex dired-find-file +Visit the file described on the current line, like typing @kbd{C-x C-f} +and supplying that file name (@code{dired-find-file}). @xref{Visiting}. + +@item @key{RET} +@itemx e +@kindex RET @r{(Dired)} +@kindex e @r{(Dired)} +Equivalent to @kbd{f}. + +@ignore @c This command seems too risky to document at all. +@item a +@kindex a @r{(Dired)} +@findex dired-find-alternate-file +Like @kbd{f}, but replaces the contents of the Dired buffer with +that of an alternate file or directory (@code{dired-find-alternate-file}). +@end ignore + +@item o +@kindex o @r{(Dired)} +@findex dired-find-file-other-window +Like @kbd{f}, but uses another window to display the file's buffer +(@code{dired-find-file-other-window}). The Dired buffer remains visible +in the first window. This is like using @kbd{C-x 4 C-f} to visit the +file. @xref{Windows}. + +@item C-o +@kindex C-o @r{(Dired)} +@findex dired-display-file +Visit the file described on the current line, and display the buffer in +another window, but do not select that window (@code{dired-display-file}). + +@item Mouse-1 +@itemx Mouse-2 +@findex dired-mouse-find-file-other-window +Visit the file named by the line you click on +(@code{dired-mouse-find-file-other-window}). This uses another window +to display the file, like the @kbd{o} command. + +@item v +@kindex v @r{(Dired)} +@findex dired-view-file +View the file described on the current line, using @kbd{M-x view-file} +(@code{dired-view-file}). Viewing a file with @code{view-file} is +like visiting it, but is slanted toward moving around in the file +conveniently and does not allow changing the file. @xref{Misc File +Ops, View File, Miscellaneous File Operations}. + +@item ^ +@kindex ^ @r{(Dired)} +@findex dired-up-directory +Visit the parent directory of the current directory +(@code{dired-up-directory}). This is equivalent to moving to the line +for @file{..} and typing @kbd{f} there. +@end table + +@node Marks vs Flags +@section Dired Marks vs. Flags + +@cindex marking many files (in Dired) + Instead of flagging a file with @samp{D}, you can @dfn{mark} the +file with some other character (usually @samp{*}). Most Dired +commands to operate on files use the files marked with @samp{*}. The +only command that operates on flagged files is @kbd{x}, which expunges +them. + + Here are some commands for marking with @samp{*}, for unmarking, and +for operating on marks. (@xref{Dired Deletion}, for commands to flag +and unflag files.) + +@table @kbd +@item m +@itemx * m +@kindex m @r{(Dired)} +@kindex * m @r{(Dired)} +@findex dired-mark +Mark the current file with @samp{*} (@code{dired-mark}). With a numeric +argument @var{n}, mark the next @var{n} files starting with the current +file. (If @var{n} is negative, mark the previous @minus{}@var{n} +files.) + +@item * * +@kindex * * @r{(Dired)} +@findex dired-mark-executables +@cindex marking executable files (in Dired) +Mark all executable files with @samp{*} +(@code{dired-mark-executables}). With a numeric argument, unmark all +those files. + +@item * @@ +@kindex * @@ @r{(Dired)} +@findex dired-mark-symlinks +@cindex marking symbolic links (in Dired) +Mark all symbolic links with @samp{*} (@code{dired-mark-symlinks}). +With a numeric argument, unmark all those files. + +@item * / +@kindex * / @r{(Dired)} +@findex dired-mark-directories +@cindex marking subdirectories (in Dired) +Mark with @samp{*} all files which are directories, except for +@file{.} and @file{..} (@code{dired-mark-directories}). With a numeric +argument, unmark all those files. + +@item * s +@kindex * s @r{(Dired)} +@findex dired-mark-subdir-files +Mark all the files in the current subdirectory, aside from @file{.} +and @file{..} (@code{dired-mark-subdir-files}). + +@item u +@itemx * u +@kindex u @r{(Dired)} +@kindex * u @r{(Dired)} +@findex dired-unmark +Remove any mark on this line (@code{dired-unmark}). + +@item @key{DEL} +@itemx * @key{DEL} +@kindex * DEL @r{(Dired)} +@findex dired-unmark-backward +@cindex unmarking files (in Dired) +Move point to previous line and remove any mark on that line +(@code{dired-unmark-backward}). + +@item * ! +@itemx U +@kindex * ! @r{(Dired)} +@kindex U @r{(Dired)} +@findex dired-unmark-all-marks +Remove all marks from all the files in this Dired buffer +(@code{dired-unmark-all-marks}). + +@item * ? @var{markchar} +@itemx M-@key{DEL} +@kindex * ? @r{(Dired)} +@kindex M-DEL @r{(Dired)} +@findex dired-unmark-all-files +Remove all marks that use the character @var{markchar} +(@code{dired-unmark-all-files}). The argument is a single +character---do not use @key{RET} to terminate it. See the description +of the @kbd{* c} command below, which lets you replace one mark +character with another. + +With a numeric argument, this command queries about each marked file, +asking whether to remove its mark. You can answer @kbd{y} meaning yes, +@kbd{n} meaning no, or @kbd{!} to remove the marks from the remaining +files without asking about them. + +@item * C-n +@itemx M-@} +@findex dired-next-marked-file +@kindex * C-n @r{(Dired)} +@kindex M-@} @r{(Dired)} +Move down to the next marked file (@code{dired-next-marked-file}) +A file is ``marked'' if it has any kind of mark. + +@item * C-p +@itemx M-@{ +@findex dired-prev-marked-file +@kindex * C-p @r{(Dired)} +@kindex M-@{ @r{(Dired)} +Move up to the previous marked file (@code{dired-prev-marked-file}) + +@item t +@itemx * t +@kindex t @r{(Dired)} +@kindex * t @r{(Dired)} +@findex dired-toggle-marks +@cindex toggling marks (in Dired) +Toggle all marks (@code{dired-toggle-marks}): files marked with @samp{*} +become unmarked, and unmarked files are marked with @samp{*}. Files +marked in any other way are not affected. + +@item * c @var{old-markchar} @var{new-markchar} +@kindex * c @r{(Dired)} +@findex dired-change-marks +Replace all marks that use the character @var{old-markchar} with marks +that use the character @var{new-markchar} (@code{dired-change-marks}). +This command is the primary way to create or use marks other than +@samp{*} or @samp{D}. The arguments are single characters---do not use +@key{RET} to terminate them. + +You can use almost any character as a mark character by means of this +command, to distinguish various classes of files. If @var{old-markchar} +is a space (@samp{ }), then the command operates on all unmarked files; +if @var{new-markchar} is a space, then the command unmarks the files it +acts on. + +To illustrate the power of this command, here is how to put @samp{D} +flags on all the files that have no marks, while unflagging all those +that already have @samp{D} flags: + +@example +* c D t * c SPC D * c t SPC +@end example + +This assumes that no files were already marked with @samp{t}. + +@item % m @var{regexp} @key{RET} +@itemx * % @var{regexp} @key{RET} +@findex dired-mark-files-regexp +@kindex % m @r{(Dired)} +@kindex * % @r{(Dired)} +Mark (with @samp{*}) all files whose names match the regular expression +@var{regexp} (@code{dired-mark-files-regexp}). This command is like +@kbd{% d}, except that it marks files with @samp{*} instead of flagging +with @samp{D}. + +Only the non-directory part of the file name is used in matching. Use +@samp{^} and @samp{$} to anchor matches. You can exclude +subdirectories by temporarily hiding them (@pxref{Hiding +Subdirectories}). + +@item % g @var{regexp} @key{RET} +@findex dired-mark-files-containing-regexp +@kindex % g @r{(Dired)} +@cindex finding files containing regexp matches (in Dired) +Mark (with @samp{*}) all files whose @emph{contents} contain a match for +the regular expression @var{regexp} +(@code{dired-mark-files-containing-regexp}). This command is like +@kbd{% m}, except that it searches the file contents instead of the file +name. + +@item C-x u +@itemx C-_ +@itemx C-/ +@kindex C-_ @r{(Dired)} +@findex dired-undo +Undo changes in the Dired buffer, such as adding or removing +marks (@code{dired-undo}). @emph{This command does not revert the +actual file operations, nor recover lost files!} It just undoes +changes in the buffer itself. + +In some cases, using this after commands that operate on files can +cause trouble. For example, after renaming one or more files, +@code{dired-undo} restores the original names in the Dired buffer, +which gets the Dired buffer out of sync with the actual contents of +the directory. +@end table + +@node Operating on Files +@section Operating on Files +@cindex operating on files in Dired + + This section describes the basic Dired commands to operate on one file +or several files. All of these commands are capital letters; all of +them use the minibuffer, either to read an argument or to ask for +confirmation, before they act. All of them let you specify the +files to manipulate in these ways: + +@itemize @bullet +@item +If you give the command a numeric prefix argument @var{n}, it operates +on the next @var{n} files, starting with the current file. (If @var{n} +is negative, the command operates on the @minus{}@var{n} files preceding +the current line.) + +@item +Otherwise, if some files are marked with @samp{*}, the command operates +on all those files. + +@item +Otherwise, the command operates on the current file only. +@end itemize + +@noindent +Certain other Dired commands, such as @kbd{!} and the @samp{%} +commands, use the same conventions to decide which files to work on. + +@vindex dired-dwim-target +@cindex two directories (in Dired) + Commands which ask for a destination directory, such as those which +copy and rename files or create links for them, try to guess the default +target directory for the operation. Normally, they suggest the Dired +buffer's default directory, but if the variable @code{dired-dwim-target} +is non-@code{nil}, and if there is another Dired buffer displayed in the +next window, that other buffer's directory is suggested instead. + + Here are the file-manipulating Dired commands that operate on files. + +@table @kbd +@findex dired-do-copy +@kindex C @r{(Dired)} +@cindex copying files (in Dired) +@item C @var{new} @key{RET} +Copy the specified files (@code{dired-do-copy}). The argument @var{new} +is the directory to copy into, or (if copying a single file) the new +name. This is like the shell command @code{cp}. + +@vindex dired-copy-preserve-time +If @code{dired-copy-preserve-time} is non-@code{nil}, then copying +with this command preserves the modification time of the old file in +the copy, like @samp{cp -p}. + +@vindex dired-recursive-copies +@cindex recursive copying +The variable @code{dired-recursive-copies} controls whether to copy +directories recursively (like @samp{cp -r}). The default is +@code{nil}, which means that directories cannot be copied. + +@item D +@findex dired-do-delete +@kindex D @r{(Dired)} +Delete the specified files (@code{dired-do-delete}). This is like the +shell command @code{rm}. + +Like the other commands in this section, this command operates on the +@emph{marked} files, or the next @var{n} files. By contrast, @kbd{x} +(@code{dired-do-flagged-delete}) deletes all @dfn{flagged} files. + +@findex dired-do-rename +@kindex R @r{(Dired)} +@cindex renaming files (in Dired) +@cindex moving files (in Dired) +@item R @var{new} @key{RET} +Rename the specified files (@code{dired-do-rename}). If you rename a +single file, the argument @var{new} is the new name of the file. If +you rename several files, the argument @var{new} is the directory into +which to move the files (this is like the shell command @code{mv}). + +Dired automatically changes the visited file name of buffers associated +with renamed files so that they refer to the new names. + +@findex dired-do-hardlink +@kindex H @r{(Dired)} +@cindex hard links (in Dired) +@item H @var{new} @key{RET} +Make hard links to the specified files (@code{dired-do-hardlink}). +This is like the shell command @code{ln}. The argument @var{new} is +the directory to make the links in, or (if making just one link) the +name to give the link. + +@findex dired-do-symlink +@kindex S @r{(Dired)} +@cindex symbolic links (creation in Dired) +@item S @var{new} @key{RET} +Make symbolic links to the specified files (@code{dired-do-symlink}). +This is like @samp{ln -s}. The argument @var{new} is the directory to +make the links in, or (if making just one link) the name to give the +link. + +@findex dired-do-chmod +@kindex M @r{(Dired)} +@cindex changing file permissions (in Dired) +@item M @var{modespec} @key{RET} +Change the mode (also called ``permission bits'') of the specified files +(@code{dired-do-chmod}). This uses the @code{chmod} program, so +@var{modespec} can be any argument that @code{chmod} can handle. + +@findex dired-do-chgrp +@kindex G @r{(Dired)} +@cindex changing file group (in Dired) +@item G @var{newgroup} @key{RET} +Change the group of the specified files to @var{newgroup} +(@code{dired-do-chgrp}). + +@findex dired-do-chown +@kindex O @r{(Dired)} +@cindex changing file owner (in Dired) +@item O @var{newowner} @key{RET} +Change the owner of the specified files to @var{newowner} +(@code{dired-do-chown}). (On most systems, only the superuser can do +this.) + +@vindex dired-chown-program +The variable @code{dired-chown-program} specifies the name of the +program to use to do the work (different systems put @code{chown} in +different places). + +@findex dired-do-touch +@kindex T @r{(Dired)} +@cindex changing file time (in Dired) +@item T @var{timestamp} @key{RET} +Touch the specified files (@code{dired-do-touch}). This means +updating their modification times to the present time. This is like +the shell command @code{touch}. + +@findex dired-do-print +@kindex P @r{(Dired)} +@cindex printing files (in Dired) +@item P @var{command} @key{RET} +Print the specified files (@code{dired-do-print}). You must specify the +command to print them with, but the minibuffer starts out with a +suitable guess made using the variables @code{lpr-command} and +@code{lpr-switches} (the same variables that @code{lpr-buffer} uses; +@pxref{Printing}). + +@findex dired-do-compress +@kindex Z @r{(Dired)} +@cindex compressing files (in Dired) +@item Z +Compress the specified files (@code{dired-do-compress}). If the file +appears to be a compressed file already, uncompress it instead. + +@findex dired-do-load +@kindex L @r{(Dired)} +@cindex loading several files (in Dired) +@item L +Load the specified Emacs Lisp files (@code{dired-do-load}). +@xref{Lisp Libraries}. + +@findex dired-do-byte-compile +@kindex B @r{(Dired)} +@cindex byte-compiling several files (in Dired) +@item B +Byte compile the specified Emacs Lisp files +(@code{dired-do-byte-compile}). @xref{Byte Compilation,, Byte +Compilation, elisp, The Emacs Lisp Reference Manual}. + +@kindex A @r{(Dired)} +@findex dired-do-search +@cindex search multiple files (in Dired) +@item A @var{regexp} @key{RET} +Search all the specified files for the regular expression @var{regexp} +(@code{dired-do-search}). + +This command is a variant of @code{tags-search}. The search stops at +the first match it finds; use @kbd{M-,} to resume the search and find +the next match. @xref{Tags Search}. + +@kindex Q @r{(Dired)} +@findex dired-do-query-replace-regexp +@cindex search and replace in multiple files (in Dired) +@item Q @var{regexp} @key{RET} @var{to} @key{RET} +Perform @code{query-replace-regexp} on each of the specified files, +replacing matches for @var{regexp} with the string +@var{to} (@code{dired-do-query-replace-regexp}). + +This command is a variant of @code{tags-query-replace}. If you exit the +query replace loop, you can use @kbd{M-,} to resume the scan and replace +more matches. @xref{Tags Search}. +@end table + +@node Shell Commands in Dired +@section Shell Commands in Dired +@cindex shell commands, Dired + +@findex dired-do-shell-command +@kindex ! @r{(Dired)} +@kindex X @r{(Dired)} +The Dired command @kbd{!} (@code{dired-do-shell-command}) reads a +shell command string in the minibuffer and runs that shell command on +all the specified files. (@kbd{X} is a synonym for @kbd{!}.) You can +specify the files to operate on in the usual ways for Dired commands +(@pxref{Operating on Files}). + + The working directory for the shell command is the top-level directory +of the Dired buffer. + + There are two ways of applying a shell command to multiple files: + +@itemize @bullet +@item +If you use @samp{*} surrounded by whitespace in the shell command, +then the command runs just once, with the list of file names +substituted for the @samp{*}. The order of file names is the order of +appearance in the Dired buffer. + +Thus, @kbd{! tar cf foo.tar * @key{RET}} runs @code{tar} on the entire +list of file names, putting them into one tar file @file{foo.tar}. + +If you want to use @samp{*} as a shell wildcard with whitespace around +it, write @samp{*""}. In the shell, this is equivalent to @samp{*}; +but since the @samp{*} is not surrounded by whitespace, Dired does +not treat it specially. + +@item +If the command string doesn't contain @samp{*} surrounded by +whitespace, then it runs once @emph{for each file}. Normally the file +name is added at the end. + +For example, @kbd{! uudecode @key{RET}} runs @code{uudecode} on each +file. + +@item +However, if the command string contains @samp{?} surrounded by +whitespace, the current file name is substituted for @samp{?} (rather +than added at the end). You can use @samp{?} this way more than once +in the command, and the same file name replaces each occurrence. +@end itemize + + To iterate over the file names in a more complicated fashion, use an +explicit shell loop. For example, here is how to uuencode each file, +making the output file name by appending @samp{.uu} to the input file +name: + +@example +for file in * ; do uuencode "$file" "$file" >"$file".uu; done +@end example + + The @kbd{!} command does not attempt to update the Dired buffer to +show new or modified files, because it doesn't understand shell +commands, and does not know what files the shell command changed. Use +the @kbd{g} command to update the Dired buffer (@pxref{Dired +Updating}). + +@node Transforming File Names +@section Transforming File Names in Dired + + This section describes Dired commands which alter file names in a +systematic way. Each command operates on some or all of the marked +files, using a new name made by transforming the existing name. + + Like the basic Dired file-manipulation commands (@pxref{Operating on +Files}), the commands described here operate either on the next +@var{n} files, or on all files marked with @samp{*}, or on the current +file. (To mark files, use the commands described in @ref{Marks vs +Flags}.) + + All of the commands described in this section work +@emph{interactively}: they ask you to confirm the operation for each +candidate file. Thus, you can select more files than you actually +need to operate on (e.g., with a regexp that matches many files), and +then filter the selected names by typing @kbd{y} or @kbd{n} when the +command prompts for confirmation. + +@table @kbd +@findex dired-upcase +@kindex % u @r{(Dired)} +@cindex upcase file names +@item % u +Rename each of the selected files to an upper-case name +(@code{dired-upcase}). If the old file names are @file{Foo} +and @file{bar}, the new names are @file{FOO} and @file{BAR}. + +@item % l +@findex dired-downcase +@kindex % l @r{(Dired)} +@cindex downcase file names +Rename each of the selected files to a lower-case name +(@code{dired-downcase}). If the old file names are @file{Foo} and +@file{bar}, the new names are @file{foo} and @file{bar}. + +@item % R @var{from} @key{RET} @var{to} @key{RET} +@kindex % R @r{(Dired)} +@findex dired-do-rename-regexp +@itemx % C @var{from} @key{RET} @var{to} @key{RET} +@kindex % C @r{(Dired)} +@findex dired-do-copy-regexp +@itemx % H @var{from} @key{RET} @var{to} @key{RET} +@kindex % H @r{(Dired)} +@findex dired-do-hardlink-regexp +@itemx % S @var{from} @key{RET} @var{to} @key{RET} +@kindex % S @r{(Dired)} +@findex dired-do-symlink-regexp +These four commands rename, copy, make hard links and make soft links, +in each case computing the new name by regular-expression substitution +from the name of the old file. +@end table + + The four regular-expression substitution commands effectively +perform a search-and-replace on the selected file names. They read +two arguments: a regular expression @var{from}, and a substitution +pattern @var{to}; they match each ``old'' file name against +@var{from}, and then replace the matching part with @var{to}. You can +use @samp{\&} and @samp{\@var{digit}} in @var{to} to refer to all or +part of what the pattern matched in the old file name, as in +@code{replace-regexp} (@pxref{Regexp Replace}). If the regular +expression matches more than once in a file name, only the first match +is replaced. + + For example, @kbd{% R ^.*$ @key{RET} x-\& @key{RET}} renames each +selected file by prepending @samp{x-} to its name. The inverse of this, +removing @samp{x-} from the front of each file name, is also possible: +one method is @kbd{% R ^x-\(.*\)$ @key{RET} \1 @key{RET}}; another is +@kbd{% R ^x- @key{RET} @key{RET}}. (Use @samp{^} and @samp{$} to anchor +matches that should span the whole file name.) + + Normally, the replacement process does not consider the files' +directory names; it operates on the file name within the directory. If +you specify a numeric argument of zero, then replacement affects the +entire absolute file name including directory name. (A non-zero +argument specifies the number of files to operate on.) + + You may want to select the set of files to operate on using the same +regexp @var{from} that you will use to operate on them. To do this, +mark those files with @kbd{% m @var{from} @key{RET}}, then use the +same regular expression in the command to operate on the files. To +make this more convenient, the @kbd{%} commands to operate on files +use the last regular expression specified in any @kbd{%} command as a +default. + +@node Comparison in Dired +@section File Comparison with Dired +@cindex file comparison (in Dired) +@cindex compare files (in Dired) + + Here are two Dired commands that compare specified files using +@code{diff}. They show the output in a buffer using Diff mode +(@pxref{Comparing Files}). + +@table @kbd +@item = +@findex dired-diff +@kindex = @r{(Dired)} +Compare the current file (the file at point) with another file (the +file at the mark) using the @code{diff} program (@code{dired-diff}). +The file at the mark is the first argument of @code{diff}, and the +file at point is the second argument. This refers to the ordinary +Emacs mark, not Dired marks; use @kbd{C-@key{SPC}} +(@code{set-mark-command}) to set the mark at the first file's line +(@pxref{Setting Mark}). + +@findex dired-backup-diff +@kindex M-= @r{(Dired)} +@item M-= +Compare the current file with its latest backup file +(@code{dired-backup-diff}). If the current file is itself a backup, +compare it with the file it is a backup of; this way, you can compare +a file with any one of its backups. + +The backup file is the first file given to @code{diff}. +@end table + +@node Subdirectories in Dired +@section Subdirectories in Dired +@cindex subdirectories in Dired +@cindex expanding subdirectories in Dired + + A Dired buffer displays just one directory in the normal case; +but you can optionally include its subdirectories as well. + + The simplest way to include multiple directories in one Dired buffer is +to specify the options @samp{-lR} for running @code{ls}. (If you give a +numeric argument when you run Dired, then you can specify these options +in the minibuffer.) That produces a recursive directory listing showing +all subdirectories at all levels. + + More often, you will want to show only specific subdirectories. You +can do this with the @kbd{i} command: + +@table @kbd +@findex dired-maybe-insert-subdir +@kindex i @r{(Dired)} +@item i +@cindex inserted subdirectory (Dired) +@cindex in-situ subdirectory (Dired) +Insert the contents of a subdirectory later in the buffer. +@end table + +Use the @kbd{i} (@code{dired-maybe-insert-subdir}) command on a line +that describes a file which is a directory. It inserts the contents of +that directory into the same Dired buffer, and moves there. Inserted +subdirectory contents follow the top-level directory of the Dired +buffer, just as they do in @samp{ls -lR} output. + +If the subdirectory's contents are already present in the buffer, the +@kbd{i} command just moves to it. + +In either case, @kbd{i} sets the Emacs mark before moving, so @kbd{C-u +C-@key{SPC}} takes you back to the old position in the buffer (the line +describing that subdirectory). + +Use the @kbd{l} command (@code{dired-do-redisplay}) to update the +subdirectory's contents. Use @kbd{C-u k} on the subdirectory header +line to delete the subdirectory. @xref{Dired Updating}. + + + + +@ifnottex +@include dired-xtra.texi +@end ifnottex + +@node Subdirectory Motion +@section Moving Over Subdirectories + + When a Dired buffer lists subdirectories, you can use the page motion +commands @kbd{C-x [} and @kbd{C-x ]} to move by entire directories +(@pxref{Pages}). + +@cindex header line (Dired) +@cindex directory header lines + The following commands move across, up and down in the tree of +directories within one Dired buffer. They move to @dfn{directory header +lines}, which are the lines that give a directory's name, at the +beginning of the directory's contents. + +@table @kbd +@findex dired-next-subdir +@kindex C-M-n @r{(Dired)} +@item C-M-n +Go to next subdirectory header line, regardless of level +(@code{dired-next-subdir}). + +@findex dired-prev-subdir +@kindex C-M-p @r{(Dired)} +@item C-M-p +Go to previous subdirectory header line, regardless of level +(@code{dired-prev-subdir}). + +@findex dired-tree-up +@kindex C-M-u @r{(Dired)} +@item C-M-u +Go up to the parent directory's header line (@code{dired-tree-up}). + +@findex dired-tree-down +@kindex C-M-d @r{(Dired)} +@item C-M-d +Go down in the directory tree, to the first subdirectory's header line +(@code{dired-tree-down}). + +@findex dired-prev-dirline +@kindex < @r{(Dired)} +@item < +Move up to the previous directory-file line (@code{dired-prev-dirline}). +These lines are the ones that describe a directory as a file in its +parent directory. + +@findex dired-next-dirline +@kindex > @r{(Dired)} +@item > +Move down to the next directory-file line (@code{dired-prev-dirline}). +@end table + +@node Hiding Subdirectories +@section Hiding Subdirectories + +@cindex hiding in Dired (Dired) + @dfn{Hiding} a subdirectory means to make it invisible, except for its +header line. + +@table @kbd +@item $ +@findex dired-hide-subdir +@kindex $ @r{(Dired)} +Hide or reveal the subdirectory that point is in, and move point to the +next subdirectory (@code{dired-hide-subdir}). A numeric argument serves +as a repeat count. + +@item M-$ +@findex dired-hide-all +@kindex M-$ @r{(Dired)} +Hide all subdirectories in this Dired buffer, leaving only their header +lines (@code{dired-hide-all}). Or, if any subdirectory is currently +hidden, make all subdirectories visible again. You can use this command +to get an overview in very deep directory trees or to move quickly to +subdirectories far away. +@end table + + Ordinary Dired commands never consider files inside a hidden +subdirectory. For example, the commands to operate on marked files +ignore files in hidden directories even if they are marked. Thus you +can use hiding to temporarily exclude subdirectories from operations +without having to remove the Dired marks on files in those +subdirectories. + +@node Dired Updating +@section Updating the Dired Buffer +@cindex updating Dired buffer +@cindex refreshing displayed files + + This section describes commands to update the Dired buffer to reflect +outside (non-Dired) changes in the directories and files, and to delete +part of the Dired buffer. + +@table @kbd +@item g +Update the entire contents of the Dired buffer (@code{revert-buffer}). + +@item l +Update the specified files (@code{dired-do-redisplay}). You specify the +files for @kbd{l} in the same way as for file operations. + +@item k +Delete the specified @emph{file lines}---not the files, just the lines +(@code{dired-do-kill-lines}). + +@item s +Toggle between alphabetical order and date/time order +(@code{dired-sort-toggle-or-edit}). + +@item C-u s @var{switches} @key{RET} +Refresh the Dired buffer using @var{switches} as +@code{dired-listing-switches}. +@end table + +@kindex g @r{(Dired)} +@findex revert-buffer @r{(Dired)} + Type @kbd{g} (@code{revert-buffer}) to update the contents of the +Dired buffer, based on changes in the files and directories listed. +This preserves all marks except for those on files that have vanished. +Hidden subdirectories are updated but remain hidden. + +@kindex l @r{(Dired)} +@findex dired-do-redisplay + To update only some of the files, type @kbd{l} +(@code{dired-do-redisplay}). Like the Dired file-operating commands, +this command operates on the next @var{n} files (or previous +@minus{}@var{n} files), or on the marked files if any, or on the +current file. Updating the files means reading their current status, +then updating their lines in the buffer to indicate that status. + + If you use @kbd{l} on a subdirectory header line, it updates the +contents of the corresponding subdirectory. + +@kindex k @r{(Dired)} +@findex dired-do-kill-lines + To delete the specified @emph{file lines} from the buffer---not +delete the files---type @kbd{k} (@code{dired-do-kill-lines}). Like +the file-operating commands, this command operates on the next @var{n} +files, or on the marked files if any; but it does not operate on the +current file as a last resort. + + If you use @kbd{k} with a numeric prefix argument to kill the line +for a file that is a directory, which you have inserted in the Dired +buffer as a subdirectory, it deletes that subdirectory from the buffer +as well. Typing @kbd{C-u k} on the header line for a subdirectory +also deletes the subdirectory from the Dired buffer. + + The @kbd{g} command brings back any individual lines that you have +killed in this way, but not subdirectories---you must use @kbd{i} to +reinsert a subdirectory. + +@cindex Dired sorting +@cindex sorting Dired buffer +@kindex s @r{(Dired)} +@findex dired-sort-toggle-or-edit + The files in a Dired buffers are normally listed in alphabetical order +by file names. Alternatively Dired can sort them by date/time. The +Dired command @kbd{s} (@code{dired-sort-toggle-or-edit}) switches +between these two sorting modes. The mode line in a Dired buffer +indicates which way it is currently sorted---by name, or by date. + + @kbd{C-u s @var{switches} @key{RET}} lets you specify a new value for +@code{dired-listing-switches}. + +@node Dired and Find +@section Dired and @code{find} +@cindex @code{find} and Dired + + You can select a set of files for display in a Dired buffer more +flexibly by using the @code{find} utility to choose the files. + +@findex find-name-dired + To search for files with names matching a wildcard pattern use +@kbd{M-x find-name-dired}. It reads arguments @var{directory} and +@var{pattern}, and chooses all the files in @var{directory} or its +subdirectories whose individual names match @var{pattern}. + + The files thus chosen are displayed in a Dired buffer, in which the +ordinary Dired commands are available. + +@findex find-grep-dired + If you want to test the contents of files, rather than their names, +use @kbd{M-x find-grep-dired}. This command reads two minibuffer +arguments, @var{directory} and @var{regexp}; it chooses all the files in +@var{directory} or its subdirectories that contain a match for +@var{regexp}. It works by running the programs @code{find} and +@code{grep}. See also @kbd{M-x grep-find}, in @ref{Grep Searching}. +Remember to write the regular expression for @code{grep}, not for Emacs. +(An alternative method of showing files whose contents match a given +regexp is the @kbd{% g @var{regexp}} command, see @ref{Marks vs Flags}.) + +@findex find-dired + The most general command in this series is @kbd{M-x find-dired}, which +lets you specify any condition that @code{find} can test. It takes two +minibuffer arguments, @var{directory} and @var{find-args}; it runs +@code{find} in @var{directory}, passing @var{find-args} to tell +@code{find} what condition to test. To use this command, you need to +know how to use @code{find}. + +@vindex find-ls-option + The format of listing produced by these commands is controlled by the +variable @code{find-ls-option}, whose default value specifies using +options @samp{-ld} for @code{ls}. If your listings are corrupted, you +may need to change the value of this variable. + +@findex locate +@findex locate-with-filter +@cindex file database (locate) +@vindex locate-command + The command @kbd{M-x locate} provides a similar interface to the +@code{locate} program. @kbd{M-x locate-with-filter} is similar, but +keeps only files whose names match a given regular expression. + + These buffers don't work entirely like ordinary Dired buffers: file +operations work, but do not always automatically update the buffer. +Reverting the buffer with @kbd{g} deletes all inserted subdirectories, +and erases all flags and marks. + +@node Wdired +@section Editing the Dired Buffer + +@cindex wdired mode +@findex wdired-change-to-wdired-mode + Wdired is a special mode that allows you to perform file operations +by editing the Dired buffer directly (the ``W'' in ``Wdired'' stands +for ``writable.'') To enter Wdired mode, type @kbd{C-x C-q} or @kbd{M-x +wdired-change-to-wdired-mode} while in a Dired buffer. Alternatively, +use @samp{Edit File Names} in the @samp{Immediate} menu bar menu. + +@findex wdired-finish-edit + While in Wdired mode, you can rename files by editing the file names +displayed in the Dired buffer. All the ordinary Emacs editing +commands, including rectangle operations and @code{query-replace}, are +available for this. Once you are done editing, type @kbd{C-c C-c} +(@code{wdired-finish-edit}). This applies your changes and switches +back to ordinary Dired mode. + + Apart from simply renaming files, you can move a file to another +directory by typing in the new file name (either absolute or +relative). To mark a file for deletion, delete the entire file name. +To change the target of a symbolic link, edit the link target name +which appears next to the link name. + + The rest of the text in the buffer, such as the file sizes and +modification dates, is marked read-only, so you can't edit it. +However, if you set @code{wdired-allow-to-change-permissions} to +@code{t}, you can edit the file permissions. For example, you can +change @samp{-rw-r--r--} to @samp{-rw-rw-rw-} to make a file +world-writable. These changes also take effect when you type @kbd{C-c +C-c}. + +@node Image-Dired +@section Viewing Image Thumbnails in Dired +@cindex image-dired mode +@cindex image-dired + + Image-Dired is a facility for browsing image files. It provides viewing +the images either as thumbnails or in full size, either inside Emacs +or through an external viewer. + +@kindex C-t d @r{(Image-Dired)} +@findex image-dired-display-thumbs + To enter Image-Dired, mark the image files you want to look at in +the Dired buffer, using @kbd{m} as usual. Then type @kbd{C-t d} +(@code{image-dired-display-thumbs}). This creates and switches to a +buffer containing image-dired, corresponding to the marked files. + + You can also enter Image-Dired directly by typing @kbd{M-x +image-dired}. This prompts for a directory; specify one that has +image files. This creates thumbnails for all the images in that +directory, and displays them all in the ``thumbnail buffer.'' This +takes a long time if the directory contains many image files, and it +asks for confirmation if the number of image files exceeds +@code{image-dired-show-all-from-dir-max-files}. + + With point in the thumbnail buffer, you can type @kbd{RET} +(@code{image-dired-display-thumbnail-original-image}) to display a +sized version of it in another window. This sizes the image to fit +the window. Use the arrow keys to move around in the buffer. For +easy browsing, use @kbd{SPC} +(@code{image-dired-display-next-thumbnail-original}) to advance and +display the next image. Typing @kbd{DEL} +(@code{image-dired-display-previous-thumbnail-original}) backs up to +the previous thumbnail and displays that instead. + +@vindex image-dired-external-viewer + To view and the image in its original size, either provide a prefix +argument (@kbd{C-u}) before pressing @kbd{RET}, or type +@kbd{C-@key{RET}} (@code{image-dired-thumbnail-display-external}) to +display the image in an external viewer. You must first configure +@code{image-dired-external-viewer}. + + You can delete images through Image-Dired also. Type @kbd{d} +(@code{image-dired-flag-thumb-original-file}) to flag the image file +for deletion in the Dired buffer. You can also delete the thumbnail +image from the thumbnail buffer with @kbd{C-d} +(@code{image-dired-delete-char}). + + More advanced features include @dfn{image tags}, which are metadata +used to categorize image files. The tags are stored in a plain text +file configured by @code{image-dired-db-file}. + + To tag image files, mark them in the dired buffer (you can also mark +files in Dired from the thumbnail buffer by typing @kbd{m}) and type +@kbd{C-t t} (@code{image-dired-tag-files}). You will be prompted for +a tag. To mark files having a certain tag, type @kbd{C-t f} +(@code{image-dired-mark-tagged-files}). After marking image files +with a certain tag, you can use @kbd{C-t d} to view them. + + You can also tag a file directly from the thumbnail buffer by typing +@kbd{t t} and you can remove a tag by typing @kbd{t r}. There is also +a special ``tag'' called ``comment'' for each file (it is not a tag in +the exact same sense as the other tags, it is handled slightly +different). That is used to enter a comment or description about the +image. You comment a file from the thumbnail buffer by typing +@kbd{c}. You will be prompted for a comment. Type @kbd{C-t c} to add +a comment from Dired (@code{image-dired-dired-comment-files}). + + Image-Dired also provides simple image manipulation. In the +thumbnail buffer, type @kbd{L} to rotate the original image 90 degrees +anti clockwise, and @kbd{R} to rotate it 90 degrees clockwise. This +rotation is lossless, and uses an external utility called JpegTRAN. + +@node Misc Dired Features +@section Other Dired Features + +@kindex + @r{(Dired)} +@findex dired-create-directory + An unusual Dired file-operation command is @kbd{+} +(@code{dired-create-directory}). This command reads a directory name, +and creates the directory if it does not already exist. + +@cindex Adding to the kill ring in Dired. +@kindex w @r{(Dired)} +@findex dired-copy-filename-as-kill + The @kbd{w} command (@code{dired-copy-filename-as-kill}) puts the +names of the marked (or next @var{n}) files into the kill ring, as if +you had killed them with @kbd{C-w}. The names are separated by a space. + + With a zero prefix argument, this uses the absolute file name of +each marked file. With just @kbd{C-u} as the prefix argument, it uses +file names relative to the Dired buffer's default directory. (This +can still contain slashes if in a subdirectory.) As a special case, +if point is on a directory headerline, @kbd{w} gives you the absolute +name of that directory. Any prefix argument or marked files are +ignored in this case. + + The main purpose of this command is so that you can yank the file +names into arguments for other Emacs commands. It also displays what +it added to the kill ring, so you can use it to display the list of +currently marked files in the echo area. + +@findex dired-compare-directories + The command @kbd{M-x dired-compare-directories} is used to compare +the current Dired buffer with another directory. It marks all the files +that are ``different'' between the two directories. It puts these marks +in all Dired buffers where these files are listed, which of course includes +the current buffer. + + The default comparison method (used if you type @key{RET} at the +prompt) is to compare just the file names---each file name that does +not appear in the other directory is ``different.'' You can specify +more stringent comparisons by entering a Lisp expression, which can +refer to the variables @code{size1} and @code{size2}, the respective +file sizes; @code{mtime1} and @code{mtime2}, the last modification +times in seconds, as floating point numbers; and @code{fa1} and +@code{fa2}, the respective file attribute lists (as returned by the +function @code{file-attributes}). This expression is evaluated for +each pair of like-named files, and if the expression's value is +non-@code{nil}, those files are considered ``different.'' + + For instance, the sequence @code{M-x dired-compare-directories +@key{RET} (> mtime1 mtime2) @key{RET}} marks files newer in this +directory than in the other, and marks files older in the other +directory than in this one. It also marks files with no counterpart, +in both directories, as always. + +@cindex drag and drop, Dired + On the X window system, Emacs supports the ``drag and drop'' +protocol. You can drag a file object from another program, and drop +it onto a Dired buffer; this either moves, copies, or creates a link +to the file in that directory. Precisely which action is taken is +determined by the originating program. Dragging files out of a Dired +buffer is currently not supported. + +@ignore + arch-tag: d105f9b9-fc1b-4c5f-a949-9b2cf3ca2fc1 +@end ignore diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi new file mode 100644 index 00000000000..21a65999ec3 --- /dev/null +++ b/doc/emacs/display.texi @@ -0,0 +1,1259 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Display, Search, Registers, Top +@chapter Controlling the Display + + Since only part of a large buffer fits in the window, Emacs tries to +show a part that is likely to be interesting. Display-control +commands allow you to specify which part of the text you want to see, +and how to display it. Many variables also affect the details of +redisplay. Unless otherwise stated, the variables described in this +chapter have their effect by customizing redisplay itself; therefore, +their values only make a difference at the time of redisplay. + +@menu +* Scrolling:: Commands to move text up and down in a window. +* Auto Scrolling:: Redisplay scrolls text automatically when needed. +* Horizontal Scrolling:: Moving text left and right in a window. +* Follow Mode:: Follow mode lets two windows scroll as one. +* Faces:: How to change the display style using faces. +* Standard Faces:: Emacs' predefined faces. +* Font Lock:: Minor mode for syntactic highlighting using faces. +* Highlight Interactively:: Tell Emacs what text to highlight. +* Fringes:: Enabling or disabling window fringes. +* Displaying Boundaries:: Displaying top and bottom of the buffer. +* Useless Whitespace:: Showing possibly-spurious trailing whitespace. +* Selective Display:: Hiding lines with lots of indentation. +* Optional Mode Line:: Optional mode line display features. +* Text Display:: How text characters are normally displayed. +* Cursor Display:: Features for displaying the cursor. +* Line Truncation:: Truncating lines to fit the screen width instead + of continuing them to multiple screen lines. +* Display Custom:: Information on variables for customizing display. +@end menu + +@node Scrolling +@section Scrolling + + If a buffer contains text that is too large to fit entirely within a +window that is displaying the buffer, Emacs shows a contiguous portion of +the text. The portion shown always contains point. + +@cindex scrolling + @dfn{Scrolling} means moving text up or down in the window so that +different parts of the text are visible. Scrolling ``forward'' or +``up'' means that text moves up, and new text appears at the bottom. +Scrolling ``backward'' or ``down'' moves text down, and new text +appears at the top. + + Scrolling happens automatically if you move point past the bottom or +top of the window. You can also scroll explicitly with the commands +in this section. + +@table @kbd +@item C-l +Clear screen and redisplay, scrolling the selected window to center +point vertically within it (@code{recenter}). +@item C-v +Scroll forward (a windowful or a specified number of lines) (@code{scroll-up}). +@item @key{NEXT} +@itemx @key{PAGEDOWN} +Likewise, scroll forward. +@item M-v +Scroll backward (@code{scroll-down}). +@item @key{PRIOR} +@itemx @key{PAGEUP} +Likewise, scroll backward. +@item @var{arg} C-l +Scroll so point is on line @var{arg} (@code{recenter}). +@item C-M-l +Scroll heuristically to bring useful information onto the screen +(@code{reposition-window}). +@end table + +@kindex C-l +@findex recenter + The most basic scrolling command is @kbd{C-l} (@code{recenter}) with +no argument. It scrolls the selected window so that point is halfway +down from the top of the window. On a text terminal, it also clears +the screen and redisplays all windows. That is useful in case the +screen is garbled (@pxref{Screen Garbled}). + +@kindex C-v +@kindex M-v +@kindex NEXT +@kindex PRIOR +@kindex PAGEDOWN +@kindex PAGEUP +@findex scroll-up +@findex scroll-down + To read the buffer a windowful at a time, use @kbd{C-v} +(@code{scroll-up}) with no argument. This scrolls forward by nearly +the whole window height. The effect is to take the two lines at the +bottom of the window and put them at the top, followed by nearly a +whole windowful of lines that were not previously visible. If point +was in the text that scrolled off the top, it ends up at the new top +of the window. + +@vindex next-screen-context-lines + @kbd{M-v} (@code{scroll-down}) with no argument scrolls backward in +a similar way, also with overlap. The number of lines of overlap that +the @kbd{C-v} or @kbd{M-v} commands leave is controlled by the +variable @code{next-screen-context-lines}; by default, it is 2. The +function keys @key{NEXT} and @key{PRIOR}, or @key{PAGEDOWN} and +@key{PAGEUP}, are equivalent to @kbd{C-v} and @kbd{M-v}. + + The commands @kbd{C-v} and @kbd{M-v} with a numeric argument scroll +the text in the selected window up or down a few lines. @kbd{C-v} +with an argument moves the text and point up, together, that many +lines; it brings the same number of new lines into view at the bottom +of the window. @kbd{M-v} with numeric argument scrolls the text +downward, bringing that many new lines into view at the top of the +window. @kbd{C-v} with a negative argument is like @kbd{M-v} and vice +versa. + + The names of scroll commands are based on the direction that the +text moves in the window. Thus, the command to scroll forward is +called @code{scroll-up} because it moves the text upward on the +screen. The keys @key{PAGEDOWN} and @key{PAGEUP} derive their names +and customary meanings from a different convention that developed +elsewhere; hence the strange result that @key{PAGEDOWN} runs +@code{scroll-up}. + +@vindex scroll-preserve-screen-position + Some users like the full-screen scroll commands to keep point at the +same screen line. To enable this behavior, set the variable +@code{scroll-preserve-screen-position} to a non-@code{nil} value. In +this mode, when these commands would scroll the text around point off +the screen, or within @code{scroll-margin} lines of the edge, they +move point to keep the same vertical position within the window. +This mode is convenient for browsing through a file by scrolling by +screenfuls; if you come back to the screen where you started, point +goes back to the line where it started. However, this mode is +inconvenient when you move to the next screen in order to move point +to the text there. + + Another way to do scrolling is with @kbd{C-l} with a numeric argument. +@kbd{C-l} does not clear the screen when given an argument; it only scrolls +the selected window. With a positive argument @var{n}, it repositions text +to put point @var{n} lines down from the top. An argument of zero puts +point on the very top line. Point does not move with respect to the text; +rather, the text and point move rigidly on the screen. @kbd{C-l} with a +negative argument puts point that many lines from the bottom of the window. +For example, @kbd{C-u - 1 C-l} puts point on the bottom line, and @kbd{C-u +- 5 C-l} puts it five lines from the bottom. @kbd{C-u C-l} scrolls to put +point at the center (vertically) of the selected window. + +@kindex C-M-l +@findex reposition-window + The @kbd{C-M-l} command (@code{reposition-window}) scrolls the current +window heuristically in a way designed to get useful information onto +the screen. For example, in a Lisp file, this command tries to get the +entire current defun onto the screen if possible. + +@node Auto Scrolling +@section Automatic Scrolling + +@vindex scroll-conservatively + Redisplay scrolls the buffer automatically when point moves out of +the visible portion of the text. The purpose of automatic scrolling +is to make point visible, but you can customize many aspects of how +this is done. + + Normally, automatic scrolling centers point vertically within the +window. However, if you set @code{scroll-conservatively} to a small +number @var{n}, then if you move point just a little off the +screen---less than @var{n} lines---then Emacs scrolls the text just +far enough to bring point back on screen. By default, +@code{scroll-conservatively} is@tie{}0. + +@cindex aggressive scrolling +@vindex scroll-up-aggressively +@vindex scroll-down-aggressively + When the window does scroll by a longer distance, you can control +how aggressively it scrolls, by setting the variables +@code{scroll-up-aggressively} and @code{scroll-down-aggressively}. +The value of @code{scroll-up-aggressively} should be either +@code{nil}, or a fraction @var{f} between 0 and 1. A fraction +specifies where on the screen to put point when scrolling upward. +More precisely, when a window scrolls up because point is above the +window start, the new start position is chosen to put point @var{f} +part of the window height from the top. The larger @var{f}, the more +aggressive the scrolling. + + @code{nil}, which is the default, scrolls to put point at the center. +So it is equivalent to .5. + + Likewise, @code{scroll-down-aggressively} is used for scrolling +down. The value, @var{f}, specifies how far point should be placed +from the bottom of the window; thus, as with +@code{scroll-up-aggressively}, a larger value is more aggressive. + +@vindex scroll-margin + The variable @code{scroll-margin} restricts how close point can come +to the top or bottom of a window. Its value is a number of screen +lines; if point comes within that many lines of the top or bottom of the +window, Emacs recenters the window. By default, @code{scroll-margin} is +0. + +@node Horizontal Scrolling +@section Horizontal Scrolling +@cindex horizontal scrolling + + @dfn{Horizontal scrolling} means shifting all the lines sideways +within a window---so that some of the text near the left margin is not +displayed at all. When the text in a window is scrolled horizontally, +text lines are truncated rather than continued (@pxref{Line +Truncation}). Whenever a window shows truncated lines, Emacs +automatically updates its horizontal scrolling whenever point moves +off the left or right edge of the screen. You can also use these +commands to do explicit horizontal scrolling. + +@table @kbd +@item C-x < +Scroll text in current window to the left (@code{scroll-left}). +@item C-x > +Scroll to the right (@code{scroll-right}). +@end table + +@kindex C-x < +@kindex C-x > +@findex scroll-left +@findex scroll-right + The command @kbd{C-x <} (@code{scroll-left}) scrolls the selected +window to the left by @var{n} columns with argument @var{n}. This moves +part of the beginning of each line off the left edge of the window. +With no argument, it scrolls by almost the full width of the window (two +columns less, to be precise). + + @kbd{C-x >} (@code{scroll-right}) scrolls similarly to the right. The +window cannot be scrolled any farther to the right once it is displayed +normally (with each line starting at the window's left margin); +attempting to do so has no effect. This means that you don't have to +calculate the argument precisely for @w{@kbd{C-x >}}; any sufficiently large +argument will restore the normal display. + + If you use those commands to scroll a window horizontally, that sets +a lower bound for automatic horizontal scrolling. Automatic scrolling +will continue to scroll the window, but never farther to the right +than the amount you previously set by @code{scroll-left}. + +@vindex hscroll-margin + The value of the variable @code{hscroll-margin} controls how close +to the window's edges point is allowed to get before the window will +be automatically scrolled. It is measured in columns. If the value +is 5, then moving point within 5 columns of the edge causes horizontal +scrolling away from that edge. + +@vindex hscroll-step + The variable @code{hscroll-step} determines how many columns to +scroll the window when point gets too close to the edge. If it's +zero, horizontal scrolling centers point horizontally within the +window. If it's a positive integer, it specifies the number of +columns to scroll by. If it's a floating-point number, it specifies +the fraction of the window's width to scroll by. The default is zero. + +@vindex auto-hscroll-mode + To disable automatic horizontal scrolling, set the variable +@code{auto-hscroll-mode} to @code{nil}. + +@node Follow Mode +@section Follow Mode +@cindex Follow mode +@cindex mode, Follow +@findex follow-mode +@cindex windows, synchronizing +@cindex synchronizing windows + + @dfn{Follow mode} is a minor mode that makes two windows, both +showing the same buffer, scroll as a single tall ``virtual window.'' +To use Follow mode, go to a frame with just one window, split it into +two side-by-side windows using @kbd{C-x 3}, and then type @kbd{M-x +follow-mode}. From then on, you can edit the buffer in either of the +two windows, or scroll either one; the other window follows it. + + In Follow mode, if you move point outside the portion visible in one +window and into the portion visible in the other window, that selects +the other window---again, treating the two as if they were parts of +one large window. + + To turn off Follow mode, type @kbd{M-x follow-mode} a second time. + +@node Faces +@section Using Multiple Typefaces +@cindex faces + + You can specify various styles for displaying text using +@dfn{faces}. Each face can specify various @dfn{face attributes}, +such as the font family, the height, weight and slant of the +characters, the foreground and background color, and underlining or +overlining. A face does not have to specify all of these attributes; +often it inherits most of them from another face. + + On graphical display, all the Emacs face attributes are meaningful. +On a text-only terminal, only some of them work. Some text-only +terminals support inverse video, bold, and underline attributes; some +support colors. Text-only terminals generally do not support changing +the height and width or the font family. + + Emacs uses faces automatically for highlighting, through the work of +Font Lock mode. @xref{Font Lock}, for more information about Font +Lock mode and syntactic highlighting. You can print out the buffer +with the highlighting that appears on your screen using the command +@code{ps-print-buffer-with-faces}. @xref{PostScript}. + + You control the appearance of a part of the text in the buffer by +specifying the face or faces to use for it. The style of display used +for any given character is determined by combining the attributes of +all the applicable faces specified for that character. Any attribute +that isn't specified by these faces is taken from the @code{default} face, +whose attributes reflect the default settings of the frame itself. + + Enriched mode, the mode for editing formatted text, includes several +commands and menus for specifying faces for text in the buffer. +@xref{Format Faces}, for how to specify the font for text in the +buffer. @xref{Format Colors}, for how to specify the foreground and +background color. + +@cindex face colors, setting +@findex set-face-foreground +@findex set-face-background + To alter the appearance of a face, use the customization buffer. +@xref{Face Customization}. You can also use X resources to specify +attributes of particular faces (@pxref{Resources}). Alternatively, +you can change the foreground and background colors of a specific face +with @kbd{M-x set-face-foreground} and @kbd{M-x set-face-background}. +These commands prompt in the minibuffer for a face name and a color +name, with completion, and then set that face to use the specified +color. Changing the colors of the @code{default} face also changes +the foreground and background colors on all frames, both existing and +those to be created in the future. (You can also set foreground and +background colors for the current frame only; see @ref{Frame +Parameters}.) + + If you want to alter the appearance of all Emacs frames, you need to +customize the frame parameters in the variable +@code{default-frame-alist}; see @ref{Creating Frames, +default-frame-alist}. + + Emacs can correctly display variable-width fonts, but Emacs commands +that calculate width and indentation do not know how to calculate +variable widths. This can sometimes lead to incorrect results when +you use variable-width fonts. In particular, indentation commands can +give inconsistent results, so we recommend you avoid variable-width +fonts for editing program source code. Filling will sometimes make +lines too long or too short. We plan to address these issues in +future Emacs versions. + +@node Standard Faces +@section Standard Faces + +@findex list-faces-display + To see what faces are currently defined, and what they look like, +type @kbd{M-x list-faces-display}. It's possible for a given face to +look different in different frames; this command shows the appearance +in the frame in which you type it. With a prefix argument, this +prompts for a regular expression, and displays only faces with names +matching that regular expression. + + Here are the standard faces for specifying text appearance. You can +apply them to specific text when you want the effects they produce. + +@table @code +@item default +This face is used for ordinary text that doesn't specify any face. +@item bold +This face uses a bold variant of the default font, if it has one. +It's up to you to choose a default font that has a bold variant, +if you want to use one. +@item italic +This face uses an italic variant of the default font, if it has one. +@item bold-italic +This face uses a bold italic variant of the default font, if it has one. +@item underline +This face underlines text. +@item fixed-pitch +This face forces use of a particular fixed-width font. +@item variable-pitch +This face forces use of a particular variable-width font. It's +reasonable to customize this face to use a different variable-width font, +if you like, but you should not make it a fixed-width font. +@item shadow +This face is used for making the text less noticeable than the surrounding +ordinary text. Usually this can be achieved by using shades of gray in +contrast with either black or white default foreground color. +@end table + + Here's an incomplete list of faces used to highlight parts of the +text temporarily for specific purposes. (Many other modes define +their own faces for this purpose.) + +@table @code +@item highlight +This face is used for highlighting portions of text, in various modes. +For example, mouse-sensitive text is highlighted using this face. +@item isearch +This face is used for highlighting the current Isearch match. +@item query-replace +This face is used for highlighting the current Query Replace match. +@item lazy-highlight +This face is used for lazy highlighting of Isearch and Query Replace +matches other than the current one. +@item region +This face is used for displaying a selected region (when Transient Mark +mode is enabled---see below). +@item secondary-selection +This face is used for displaying a secondary X selection (@pxref{Secondary +Selection}). +@item trailing-whitespace +The face for highlighting excess spaces and tabs at the end of a line +when @code{show-trailing-whitespace} is non-@code{nil}; see +@ref{Useless Whitespace}. +@item nobreak-space +The face for displaying the character ``nobreak space.'' +@item escape-glyph +The face for highlighting the @samp{\} or @samp{^} that indicates +a control character. It's also used when @samp{\} indicates a +nobreak space or nobreak (soft) hyphen. +@end table + +@cindex @code{region} face + When Transient Mark mode is enabled, the text of the region is +highlighted when the mark is active. This uses the face named +@code{region}; you can control the style of highlighting by changing the +style of this face (@pxref{Face Customization}). @xref{Transient Mark}, +for more information about Transient Mark mode and activation and +deactivation of the mark. + + These faces control the appearance of parts of the Emacs frame. +They exist as faces to provide a consistent way to customize the +appearance of these parts of the frame. + +@table @code +@item mode-line +@itemx modeline +This face is used for the mode line of the currently selected window, +and for menu bars when toolkit menus are not used. By default, it's +drawn with shadows for a ``raised'' effect on graphical displays, and +drawn as the inverse of the default face on non-windowed terminals. +@code{modeline} is an alias for the @code{mode-line} face, for +compatibility with old Emacs versions. +@item mode-line-inactive +Like @code{mode-line}, but used for mode lines of the windows other +than the selected one (if @code{mode-line-in-non-selected-windows} is +non-@code{nil}). This face inherits from @code{mode-line}, so changes +in that face affect mode lines in all windows. +@item mode-line-highlight +Like @code{highlight}, but used for portions of text on mode lines. +@item mode-line-buffer-id +This face is used for buffer identification parts in the mode line. +@item header-line +Similar to @code{mode-line} for a window's header line, which appears +at the top of a window just as the mode line appears at the bottom. +Most windows do not have a header line---only some special modes, such +Info mode, create one. +@item vertical-border +This face is used for the vertical divider between windows. +By default this face inherits from the @code{mode-line-inactive} face +on character terminals. On graphical displays the foreground color of +this face is used for the vertical line between windows without +scrollbars. +@item minibuffer-prompt +@cindex @code{minibuffer-prompt} face +@vindex minibuffer-prompt-properties +This face is used for the prompt strings displayed in the minibuffer. +By default, Emacs automatically adds this face to the value of +@code{minibuffer-prompt-properties}, which is a list of text +properties used to display the prompt text. (This variable takes +effect when you enter the minibuffer.) +@item fringe +@cindex @code{fringe} face +The face for the fringes to the left and right of windows on graphic +displays. (The fringes are the narrow portions of the Emacs frame +between the text area and the window's right and left borders.) +@xref{Fringes}. +@item scroll-bar +This face determines the visual appearance of the scroll bar. +@xref{Scroll Bars}. +@item border +This face determines the color of the frame border. +@item cursor +This face determines the color of the cursor. +@item mouse +This face determines the color of the mouse pointer. +@item tool-bar +This face determines the color of tool bar icons. @xref{Tool Bars}. +@item tooltip +This face is used for tooltips. @xref{Tooltips}. +@item menu +@cindex menu bar appearance +@cindex @code{menu} face, no effect if customized +@cindex customization of @code{menu} face +This face determines the colors and font of Emacs's menus. @xref{Menu +Bars}. Setting the font of LessTif/Motif menus is currently not +supported; attempts to set the font are ignored in this case. +Likewise, attempts to customize this face in Emacs built with GTK and +in the MS-Windows/Mac ports are ignored by the respective GUI toolkits; +you need to use system-wide styles and options to change the +appearance of the menus. +@end table + +@node Font Lock +@section Font Lock mode +@cindex Font Lock mode +@cindex mode, Font Lock +@cindex syntax highlighting and coloring + + Font Lock mode is a minor mode, always local to a particular buffer, +which highlights (or ``fontifies'') the buffer contents according to +the syntax of the text you are editing. It can recognize comments and +strings in most languages; in several languages, it can also recognize +and properly highlight various other important constructs---for +example, names of functions being defined or reserved keywords. +Some special modes, such as Occur mode and Info mode, have completely +specialized ways of assigning fonts for Font Lock mode. + +@findex font-lock-mode + Font Lock mode is turned on by default in all modes which support it. +You can toggle font-lock for each buffer with the command @kbd{M-x +font-lock-mode}. Using a positive argument unconditionally turns Font +Lock mode on, and a negative or zero argument turns it off. + +@findex global-font-lock-mode +@vindex global-font-lock-mode + If you do not wish Font Lock mode to be turned on by default, +customize the variable @code{global-font-lock-mode} using the Customize +interface (@pxref{Easy Customization}), or use the function +@code{global-font-lock-mode} in your @file{.emacs} file, like this: + +@example +(global-font-lock-mode 0) +@end example + +@noindent +This variable, like all the variables that control Font Lock mode, +take effect whenever fontification is done; that is, potentially at +any time. + +@findex turn-on-font-lock + If you have disabled Global Font Lock mode, you can still enable Font +Lock for specific major modes by adding the function +@code{turn-on-font-lock} to the mode hooks (@pxref{Hooks}). For +example, to enable Font Lock mode for editing C files, you can do this: + +@example +(add-hook 'c-mode-hook 'turn-on-font-lock) +@end example + + Font Lock mode uses several specifically named faces to do its job, +including @code{font-lock-string-face}, @code{font-lock-comment-face}, +and others. The easiest way to find them all is to use @kbd{M-x +customize-group @key{RET} font-lock-faces @key{RET}}. You can then +use that customization buffer to customize the appearance of these +faces. @xref{Face Customization}. + + You can also customize these faces using @kbd{M-x +set-face-foreground} or @kbd{M-x set-face-background}. @xref{Faces}. + +@vindex font-lock-maximum-decoration + The variable @code{font-lock-maximum-decoration} specifies the +preferred level of fontification, for modes that provide multiple +levels. Level 1 is the least amount of fontification; some modes +support levels as high as 3. The normal default is ``as high as +possible.'' You can specify an integer, which applies to all modes, or +you can specify different numbers for particular major modes; for +example, to use level 1 for C/C++ modes, and the default level +otherwise, use this: + +@example +(setq font-lock-maximum-decoration + '((c-mode . 1) (c++-mode . 1))) +@end example + +@vindex font-lock-maximum-size + Fontification can be too slow for large buffers, so you can suppress +it for buffers above a certain size. The variable +@code{font-lock-maximum-size} specifies a buffer size, beyond which +buffer fontification is suppressed. + +@c @w is used below to prevent a bad page-break. +@vindex font-lock-beginning-of-syntax-function +@cindex incorrect fontification +@cindex parenthesis in column zero and fontification +@cindex brace in column zero and fontification + Comment and string fontification (or ``syntactic'' fontification) +relies on analysis of the syntactic structure of the buffer text. For +the sake of speed, some modes, including Lisp mode, rely on a special +convention: an open-parenthesis or open-brace in the leftmost column +always defines the @w{beginning} of a defun, and is thus always +outside any string or comment. (@xref{Left Margin Paren}.) If you +don't follow this convention, Font Lock mode can misfontify the text +that follows an open-parenthesis or open-brace in the leftmost column +that is inside a string or comment. + +@cindex slow display during scrolling + The variable @code{font-lock-beginning-of-syntax-function} (always +buffer-local) specifies how Font Lock mode can find a position +guaranteed to be outside any comment or string. In modes which use the +leftmost column parenthesis convention, the default value of the variable +is @code{beginning-of-defun}---that tells Font Lock mode to use the +convention. If you set this variable to @code{nil}, Font Lock no longer +relies on the convention. This avoids incorrect results, but the price +is that, in some cases, fontification for a changed text must rescan +buffer text from the beginning of the buffer. This can considerably +slow down redisplay while scrolling, particularly if you are close to +the end of a large buffer. + +@findex font-lock-add-keywords + Font Lock highlighting patterns already exist for many modes, but you +may want to fontify additional patterns. You can use the function +@code{font-lock-add-keywords}, to add your own highlighting patterns for +a particular mode. For example, to highlight @samp{FIXME:} words in C +comments, use this: + +@example +(font-lock-add-keywords + 'c-mode + '(("\\<\\(FIXME\\):" 1 font-lock-warning-face t))) +@end example + +@findex font-lock-remove-keywords + To remove keywords from the font-lock highlighting patterns, use the +function @code{font-lock-remove-keywords}. @xref{Search-based +Fontification,,, elisp, The Emacs Lisp Reference Manual}, for +documentation of the format of this list. + +@cindex just-in-time (JIT) font-lock +@cindex background syntax highlighting + Fontifying large buffers can take a long time. To avoid large +delays when a file is visited, Emacs fontifies only the visible +portion of a buffer. As you scroll through the buffer, each portion +that becomes visible is fontified as soon as it is displayed. The +parts of the buffer that are not displayed are fontified +``stealthily,'' in the background, i.e.@: when Emacs is idle. You can +control this background fontification, also called @dfn{Just-In-Time} +(or @dfn{JIT}) Lock, by customizing variables in the customization +group @samp{jit-lock}. @xref{Specific Customization}. + +@node Highlight Interactively +@section Interactive Highlighting +@cindex highlighting by matching +@cindex interactive highlighting +@cindex Highlight Changes mode + +@findex highlight-changes-mode + Use @kbd{M-x highlight-changes-mode} to enable (or disable) +Highlight Changes mode, a minor mode that uses faces (colors, +typically) to indicate which parts of the buffer were changed most +recently. + +@cindex Hi Lock mode +@findex hi-lock-mode + Hi Lock mode highlights text that matches regular expressions you +specify. For example, you might wish to see all the references to a +certain variable in a program source file, highlight certain parts in +a voluminous output of some program, or make certain names stand out +in an article. Use the @kbd{M-x hi-lock-mode} command to enable (or +disable) Hi Lock mode. To enable Hi Lock mode for all buffers, use +@kbd{M-x global-hi-lock-mode} or place @code{(global-hi-lock-mode 1)} +in your @file{.emacs} file. + + Hi Lock mode works like Font Lock mode (@pxref{Font Lock}), except +that you specify explicitly the regular expressions to highlight. You +control them with these commands: + +@table @kbd +@item C-x w h @var{regexp} @key{RET} @var{face} @key{RET} +@kindex C-x w h +@findex highlight-regexp +Highlight text that matches @var{regexp} using face @var{face} +(@code{highlight-regexp}). The highlighting will remain as long as +the buffer is loaded. For example, to highlight all occurrences of +the word ``whim'' using the default face (a yellow background) +@kbd{C-x w h whim @key{RET} @key{RET}}. Any face can be used for +highlighting, Hi Lock provides several of its own and these are +pre-loaded into a history list. While being prompted for a face use +@kbd{M-p} and @kbd{M-n} to cycle through them. + +You can use this command multiple times, specifying various regular +expressions to highlight in different ways. + +@item C-x w r @var{regexp} @key{RET} +@kindex C-x w r +@findex unhighlight-regexp +Unhighlight @var{regexp} (@code{unhighlight-regexp}). + +If you invoke this from the menu, you select the expression to +unhighlight from a list. If you invoke this from the keyboard, you +use the minibuffer. It will show the most recently added regular +expression; use @kbd{M-p} to show the next older expression and +@kbd{M-n} to select the next newer expression. (You can also type the +expression by hand, with completion.) When the expression you want to +unhighlight appears in the minibuffer, press @kbd{@key{RET}} to exit +the minibuffer and unhighlight it. + +@item C-x w l @var{regexp} @key{RET} @var{face} @key{RET} +@kindex C-x w l +@findex highlight-lines-matching-regexp +@cindex lines, highlighting +@cindex highlighting lines of text +Highlight entire lines containing a match for @var{regexp}, using face +@var{face} (@code{highlight-lines-matching-regexp}). + +@item C-x w b +@kindex C-x w b +@findex hi-lock-write-interactive-patterns +Insert all the current highlighting regexp/face pairs into the buffer +at point, with comment delimiters to prevent them from changing your +program. (This key binding runs the +@code{hi-lock-write-interactive-patterns} command.) + +These patterns are extracted from the comments, if appropriate, if you +invoke @kbd{M-x hi-lock-find-patterns}, or if you visit the file while +Hi Lock mode is enabled (since that runs @code{hi-lock-find-patterns}). + +@item C-x w i +@kindex C-x w i +@findex hi-lock-find-patterns +Extract regexp/face pairs from comments in the current buffer +(@code{hi-lock-find-patterns}). Thus, you can enter patterns +interactively with @code{highlight-regexp}, store them into the file +with @code{hi-lock-write-interactive-patterns}, edit them (perhaps +including different faces for different parenthesized parts of the +match), and finally use this command (@code{hi-lock-find-patterns}) to +have Hi Lock highlight the edited patterns. + +@vindex hi-lock-file-patterns-policy +The variable @code{hi-lock-file-patterns-policy} controls whether Hi +Lock mode should automatically extract and highlight patterns found in +a file when it is visited. Its value can be @code{nil} (never +highlight), @code{t} (highlight the patterns), @code{ask} (query the +user), or a function. If it is a function, +@code{hi-lock-find-patterns} calls it with the patterns as argument; +if the function returns non-@code{nil}, the patterns are used. The +default is @code{nil}. Note that patterns are always highlighted if +you call @code{hi-lock-find-patterns} directly, regardless of the +value of this variable. + +@vindex hi-lock-exclude-modes +Also, @code{hi-lock-find-patterns} does nothing if the current major +mode's symbol is a member of the list @code{hi-lock-exclude-modes}. +@end table + +@node Fringes +@section Window Fringes +@cindex fringes + + On a graphical display, each Emacs window normally has narrow +@dfn{fringes} on the left and right edges. The fringes display +indications about the text in the window. + + The most common use of the fringes is to indicate a continuation +line, when one line of text is split into multiple lines on the +screen. The left fringe shows a curving arrow for each screen line +except the first, indicating that ``this is not the real beginning.'' +The right fringe shows a curving arrow for each screen line except the +last, indicating that ``this is not the real end.'' + + The fringes indicate line truncation with short horizontal arrows +meaning ``there's more text on this line which is scrolled +horizontally out of view;'' clicking the mouse on one of the arrows +scrolls the display horizontally in the direction of the arrow. The +fringes can also indicate other things, such as empty lines, or where a +program you are debugging is executing (@pxref{Debuggers}). + +@findex set-fringe-style +@findex fringe-mode + You can enable and disable the fringes for all frames using +@kbd{M-x fringe-mode}. To enable and disable the fringes +for the selected frame, use @kbd{M-x set-fringe-style}. + +@node Displaying Boundaries +@section Displaying Boundaries + +@vindex indicate-buffer-boundaries + On a graphical display, Emacs can indicate the buffer boundaries in +the fringes. It indicates the first line and the last line with +angle images in the fringes. This can be combined with up and down +arrow images which say whether it is possible to scroll the window up +and down. + + The buffer-local variable @code{indicate-buffer-boundaries} controls +how the buffer boundaries and window scrolling is indicated in the +fringes. If the value is @code{left} or @code{right}, both angle and +arrow bitmaps are displayed in the left or right fringe, respectively. + + If value is an alist, each element @code{(@var{indicator} . +@var{position})} specifies the position of one of the indicators. +The @var{indicator} must be one of @code{top}, @code{bottom}, +@code{up}, @code{down}, or @code{t} which specifies the default +position for the indicators not present in the alist. +The @var{position} is one of @code{left}, @code{right}, or @code{nil} +which specifies not to show this indicator. + + For example, @code{((top . left) (t . right))} places the top angle +bitmap in left fringe, the bottom angle bitmap in right fringe, and +both arrow bitmaps in right fringe. To show just the angle bitmaps in +the left fringe, but no arrow bitmaps, use @code{((top . left) +(bottom . left))}. + +@vindex default-indicate-buffer-boundaries + The value of the variable @code{default-indicate-buffer-boundaries} +is the default value for @code{indicate-buffer-boundaries} in buffers +that do not override it. + +@node Useless Whitespace +@section Useless Whitespace + +@cindex trailing whitespace +@cindex whitespace, trailing +@vindex show-trailing-whitespace + It is easy to leave unnecessary spaces at the end of a line, or +empty lines at the end of a file, without realizing it. In most +cases, this @dfn{trailing whitespace} has no effect, but there are +special circumstances where it matters. It can also be a nuisance +that the line has ``changed,'' when the change is just spaces added or +removed at the end. + + You can make trailing whitespace at the end of a line visible on the +screen by setting the buffer-local variable +@code{show-trailing-whitespace} to @code{t}. Then Emacs displays +trailing whitespace in the face @code{trailing-whitespace}. + + This feature does not apply when point is at the end of the line +containing the whitespace. Strictly speaking, that is ``trailing +whitespace'' nonetheless, but displaying it specially in that case +looks ugly while you are typing in new text. In this special case, +the location of point is enough to show you that the spaces are +present. + +@findex delete-trailing-whitespace + To delete all trailing whitespace within the current buffer's +accessible portion (@pxref{Narrowing}), type @kbd{M-x +delete-trailing-whitespace @key{RET}}. (This command does not remove +the form-feed characters.) + +@vindex indicate-empty-lines +@vindex default-indicate-empty-lines +@cindex unused lines +@cindex fringes, and unused line indication + Emacs can indicate unused lines at the end of the window with a +small image in the left fringe (@pxref{Fringes}). The image appears +for window lines that do not correspond to any buffer text. Blank +lines at the end of the buffer then stand out because they do not have +this image in the fringe. + + To enable this feature, set the buffer-local variable +@code{indicate-empty-lines} to a non-@code{nil} value. The default +value of this variable is controlled by the variable +@code{default-indicate-empty-lines}; by setting that variable, you +can enable or disable this feature for all new buffers. (This feature +currently doesn't work on text-only terminals.) + +@node Selective Display +@section Selective Display +@cindex selective display +@findex set-selective-display +@kindex C-x $ + + Emacs has the ability to hide lines indented more than a certain number +of columns (you specify how many columns). You can use this to get an +overview of a part of a program. + + To hide lines in the current buffer, type @kbd{C-x $} +(@code{set-selective-display}) with a numeric argument @var{n}. Then +lines with at least @var{n} columns of indentation disappear from the +screen. The only indication of their presence is that three dots +(@samp{@dots{}}) appear at the end of each visible line that is +followed by one or more hidden ones. + + The commands @kbd{C-n} and @kbd{C-p} move across the hidden lines as +if they were not there. + + The hidden lines are still present in the buffer, and most editing +commands see them as usual, so you may find point in the middle of the +hidden text. When this happens, the cursor appears at the end of the +previous line, after the three dots. If point is at the end of the +visible line, before the newline that ends it, the cursor appears before +the three dots. + + To make all lines visible again, type @kbd{C-x $} with no argument. + +@vindex selective-display-ellipses + If you set the variable @code{selective-display-ellipses} to +@code{nil}, the three dots do not appear at the end of a line that +precedes hidden lines. Then there is no visible indication of the +hidden lines. This variable becomes local automatically when set. + + See also @ref{Outline Mode} for another way to hide part of +the text in a buffer. + +@node Optional Mode Line +@section Optional Mode Line Features + +@cindex buffer size display +@cindex display of buffer size +@findex size-indication-mode + The buffer percentage @var{pos} indicates the percentage of the +buffer above the top of the window. You can additionally display the +size of the buffer by typing @kbd{M-x size-indication-mode} to turn on +Size Indication mode. The size will be displayed immediately +following the buffer percentage like this: + +@example +@var{POS} of @var{SIZE} +@end example + +@noindent +Here @var{SIZE} is the human readable representation of the number of +characters in the buffer, which means that @samp{k} for 10^3, @samp{M} +for 10^6, @samp{G} for 10^9, etc., are used to abbreviate. + +@cindex narrowing, and buffer size display + If you have narrowed the buffer (@pxref{Narrowing}), the size of the +accessible part of the buffer is shown. + +@cindex line number display +@cindex display of line number +@findex line-number-mode + The current line number of point appears in the mode line when Line +Number mode is enabled. Use the command @kbd{M-x line-number-mode} to +turn this mode on and off; normally it is on. The line number appears +after the buffer percentage @var{pos}, with the letter @samp{L} to +indicate what it is. + +@cindex Column Number mode +@cindex mode, Column Number +@findex column-number-mode + Similarly, you can display the current column number by turning on +Column number mode with @kbd{M-x column-number-mode}. The column +number is indicated by the letter @samp{C}. However, when both of +these modes are enabled, the line and column numbers are displayed in +parentheses, the line number first, rather than with @samp{L} and +@samp{C}. For example: @samp{(561,2)}. @xref{Minor Modes}, for more +information about minor modes and about how to use these commands. + +@cindex narrowing, and line number display + If you have narrowed the buffer (@pxref{Narrowing}), the displayed +line number is relative to the accessible portion of the buffer. +Thus, it isn't suitable as an argument to @code{goto-line}. (Use +@code{what-line} command to see the line number relative to the whole +file.) + +@vindex line-number-display-limit + If the buffer is very large (larger than the value of +@code{line-number-display-limit}), then the line number doesn't appear. +Emacs doesn't compute the line number when the buffer is large, because +that would be too slow. Set it to @code{nil} to remove the limit. + +@vindex line-number-display-limit-width + Line-number computation can also be slow if the lines in the buffer +are too long. For this reason, Emacs normally doesn't display line +numbers if the average width, in characters, of lines near point is +larger than the value of the variable +@code{line-number-display-limit-width}. The default value is 200 +characters. + +@findex display-time +@cindex time (on mode line) + Emacs can optionally display the time and system load in all mode +lines. To enable this feature, type @kbd{M-x display-time} or customize +the option @code{display-time-mode}. The information added to the mode +line usually appears after the buffer name, before the mode names and +their parentheses. It looks like this: + +@example +@var{hh}:@var{mm}pm @var{l.ll} +@end example + +@noindent +@vindex display-time-24hr-format +Here @var{hh} and @var{mm} are the hour and minute, followed always by +@samp{am} or @samp{pm}. @var{l.ll} is the average number of running +processes in the whole system recently. (Some fields may be missing if +your operating system cannot support them.) If you prefer time display +in 24-hour format, set the variable @code{display-time-24hr-format} +to @code{t}. + +@cindex mail (on mode line) +@vindex display-time-use-mail-icon +@vindex display-time-mail-face +@vindex display-time-mail-file +@vindex display-time-mail-directory + The word @samp{Mail} appears after the load level if there is mail +for you that you have not read yet. On a graphical display you can use +an icon instead of @samp{Mail} by customizing +@code{display-time-use-mail-icon}; this may save some space on the mode +line. You can customize @code{display-time-mail-face} to make the mail +indicator prominent. Use @code{display-time-mail-file} to specify +the mail file to check, or set @code{display-time-mail-directory} +to specify the directory to check for incoming mail (any nonempty regular +file in the directory is considered as ``newly arrived mail''). + +@cindex mode line, 3D appearance +@cindex attributes of mode line, changing +@cindex non-integral number of lines in a window + By default, the mode line is drawn on graphics displays with +3D-style highlighting, like that of a button when it is not being +pressed. If you don't like this effect, you can disable the 3D +highlighting of the mode line, by customizing the attributes of the +@code{mode-line} face. @xref{Face Customization}. + +@cindex non-selected windows, mode line appearance + By default, the mode line of nonselected windows is displayed in a +different face, called @code{mode-line-inactive}. Only the selected +window is displayed in the @code{mode-line} face. This helps show +which window is selected. When the minibuffer is selected, since +it has no mode line, the window from which you activated the minibuffer +has its mode line displayed using @code{mode-line}; as a result, +ordinary entry to the minibuffer does not change any mode lines. + +@vindex mode-line-in-non-selected-windows + You can disable use of @code{mode-line-inactive} by setting variable +@code{mode-line-in-non-selected-windows} to @code{nil}; then all mode +lines are displayed in the @code{mode-line} face. + +@vindex eol-mnemonic-unix +@vindex eol-mnemonic-dos +@vindex eol-mnemonic-mac +@vindex eol-mnemonic-undecided + You can customize the mode line display for each of the end-of-line +formats by setting each of the variables @code{eol-mnemonic-unix}, +@code{eol-mnemonic-dos}, @code{eol-mnemonic-mac}, and +@code{eol-mnemonic-undecided} to the strings you prefer. + +@node Text Display +@section How Text Is Displayed +@cindex characters (in text) + + @acronym{ASCII} printing characters (octal codes 040 through 0176) in Emacs +buffers are displayed with their graphics, as are non-ASCII multibyte +printing characters (octal codes above 0400). + + Some @acronym{ASCII} control characters are displayed in special ways. The +newline character (octal code 012) is displayed by starting a new line. +The tab character (octal code 011) is displayed by moving to the next +tab stop column (normally every 8 columns). + + Other @acronym{ASCII} control characters are normally displayed as a caret +(@samp{^}) followed by the non-control version of the character; thus, +control-A is displayed as @samp{^A}. The caret appears in face +@code{escape-glyph}. + + Non-@acronym{ASCII} characters 0200 through 0237 (octal) are +displayed with octal escape sequences; thus, character code 0230 +(octal) is displayed as @samp{\230}. The backslash appears in face +@code{escape-glyph}. + +@vindex ctl-arrow + If the variable @code{ctl-arrow} is @code{nil}, control characters in +the buffer are displayed with octal escape sequences, except for newline +and tab. Altering the value of @code{ctl-arrow} makes it local to the +current buffer; until that time, the default value is in effect. The +default is initially @code{t}. + + The display of character codes 0240 through 0377 (octal) may be +either as escape sequences or as graphics. They do not normally occur +in multibyte buffers, but if they do, they are displayed as Latin-1 +graphics. In unibyte mode, if you enable European display they are +displayed using their graphics (assuming your terminal supports them), +otherwise as escape sequences. @xref{Unibyte Mode}. + +@vindex nobreak-char-display +@cindex no-break space, display +@cindex no-break hyphen, display +@cindex soft hyphen, display + Some character sets define ``no-break'' versions of the space and +hyphen characters, which are used where a line should not be broken. +Emacs normally displays these characters with special faces +(respectively, @code{nobreak-space} and @code{escape-glyph}) to +distinguish them from ordinary spaces and hyphens. You can turn off +this feature by setting the variable @code{nobreak-char-display} to +@code{nil}. If you set the variable to any other value, that means to +prefix these characters with an escape character. + +@vindex tab-width +@vindex default-tab-width + Normally, a tab character in the buffer is displayed as whitespace which +extends to the next display tab stop position, and display tab stops come +at intervals equal to eight spaces. The number of spaces per tab is +controlled by the variable @code{tab-width}, which is made local by +changing it. Note that how the tab character +in the buffer is displayed has nothing to do with the definition of +@key{TAB} as a command. The variable @code{tab-width} must have an +integer value between 1 and 1000, inclusive. The variable +@code{default-tab-width} controls the default value of this variable +for buffers where you have not set it locally. + + You can customize the way any particular character code is displayed +by means of a display table. @xref{Display Tables,, Display Tables, +elisp, The Emacs Lisp Reference Manual}. + +@node Cursor Display +@section Displaying the Cursor + +@findex blink-cursor-mode +@vindex blink-cursor-alist +@cindex cursor, locating visually +@cindex cursor, blinking + You can customize the cursor's color, and whether it blinks, using +the @code{cursor} Custom group (@pxref{Easy Customization}). On +a graphical display, the command @kbd{M-x blink-cursor-mode} enables +or disables the blinking of the cursor. (On text terminals, the +terminal itself blinks the cursor, and Emacs has no control over it.) +You can control how the cursor appears when it blinks off by setting +the variable @code{blink-cursor-alist}. + +@vindex visible-cursor + Some text terminals offer two different cursors: the normal cursor +and the very visible cursor, where the latter may be e.g. bigger or +blinking. By default Emacs uses the very visible cursor, and switches +to it when you start or resume Emacs. If the variable +@code{visible-cursor} is @code{nil} when Emacs starts or resumes, it +doesn't switch, so it uses the normal cursor. + +@cindex cursor in non-selected windows +@vindex cursor-in-non-selected-windows + Normally, the cursor appears in non-selected windows in the ``off'' +state, with the same appearance as when the blinking cursor blinks +``off.'' For a box cursor, this is a hollow box; for a bar cursor, +this is a thinner bar. To turn off cursors in non-selected windows, +customize the variable @code{cursor-in-non-selected-windows} and assign +it a @code{nil} value. + +@vindex x-stretch-cursor +@cindex wide block cursor + On graphical displays, Emacs can optionally draw the block cursor +as wide as the character under the cursor---for example, if the cursor +is on a tab character, it would cover the full width occupied by that +tab character. To enable this feature, set the variable +@code{x-stretch-cursor} to a non-@code{nil} value. + +@findex hl-line-mode +@findex global-hl-line-mode +@cindex highlight current line + To make the cursor even more visible, you can use HL Line mode, a +minor mode that highlights the line containing point. Use @kbd{M-x +hl-line-mode} to enable or disable it in the current buffer. @kbd{M-x +global-hl-line-mode} enables or disables the same mode globally. + +@node Line Truncation +@section Truncation of Lines + +@cindex truncation +@cindex line truncation, and fringes + As an alternative to continuation, Emacs can display long lines by +@dfn{truncation}. This means that all the characters that do not fit +in the width of the screen or window do not appear at all. On +graphical displays, a small straight arrow in the fringe indicates +truncation at either end of the line. On text-only terminals, @samp{$} +appears in the first column when there is text truncated to the left, +and in the last column when there is text truncated to the right. + +@vindex truncate-lines +@findex toggle-truncate-lines + Horizontal scrolling automatically causes line truncation +(@pxref{Horizontal Scrolling}). You can explicitly enable line +truncation for a particular buffer with the command @kbd{M-x +toggle-truncate-lines}. This works by locally changing the variable +@code{truncate-lines}. If that variable is non-@code{nil}, long lines +are truncated; if it is @code{nil}, they are continued onto multiple +screen lines. Setting the variable @code{truncate-lines} in any way +makes it local to the current buffer; until that time, the default +value is in effect. The default value is normally @code{nil}. + +@c @vindex truncate-partial-width-windows @c Idx entry is in Split Windows. + If the variable @code{truncate-partial-width-windows} is +non-@code{nil}, it forces truncation rather than continuation in any +window less than the full width of the screen or frame, regardless of +the value of @code{truncate-lines}. For information about side-by-side +windows, see @ref{Split Window}. See also @ref{Display,, Display, +elisp, The Emacs Lisp Reference Manual}. + +@vindex overflow-newline-into-fringe + If the variable @code{overflow-newline-into-fringe} is +non-@code{nil} on a graphical display, then Emacs does not continue or +truncate a line which is exactly as wide as the window. Instead, the +newline overflows into the right fringe, and the cursor appears in the +fringe when positioned on that newline. + +@node Display Custom +@section Customization of Display + + This section describes variables (@pxref{Variables}) that you can +change to customize how Emacs displays. Beginning users can skip +it. +@c the reason for that pxref is because an xref early in the +@c ``echo area'' section leads here. + +@vindex inverse-video + If the variable @code{inverse-video} is non-@code{nil}, Emacs attempts +to invert all the lines of the display from what they normally are. + +@vindex visible-bell + If the variable @code{visible-bell} is non-@code{nil}, Emacs attempts +to make the whole screen blink when it would normally make an audible bell +sound. This variable has no effect if your terminal does not have a way +to make the screen blink. + +@vindex echo-keystrokes + The variable @code{echo-keystrokes} controls the echoing of multi-character +keys; its value is the number of seconds of pause required to cause echoing +to start, or zero, meaning don't echo at all. The value takes effect when +there is someting to echo. @xref{Echo Area}. + +@vindex baud-rate + The variable @anchor{baud-rate}@code{baud-rate} holds the output +speed of the terminal, as far as Emacs knows. Setting this variable +does not change the speed of actual data transmission, but the value +is used for calculations. On text-only terminals, it affects padding, +and decisions about whether to scroll part of the screen or redraw it +instead. It also affects the behavior of incremental search. + + On graphical displays, @code{baud-rate} is only used to determine +how frequently to look for pending input during display updating. A +higher value of @code{baud-rate} means that check for pending input +will be done less frequently. + +@cindex hourglass pointer display +@vindex hourglass-delay + On graphical display, Emacs can optionally display the mouse pointer +in a special shape to say that Emacs is busy. To turn this feature on +or off, customize the group @code{cursor}. You can also control the +amount of time Emacs must remain busy before the busy indicator is +displayed, by setting the variable @code{hourglass-delay}. + +@vindex overline-margin + On graphical display, this variables specifies the vertical position +of an overline above the text, including the height of the overline +itself (1 pixel). The default value is 2 pixels. + +@vindex x-underline-at-descent-line + On graphical display, Emacs normally draws an underline at the +baseline level of the font. If @code{x-underline-at-descent-line} is +non-@code{nil}, Emacs draws the underline at the same height as the +font's descent line. + +@findex tty-suppress-bold-inverse-default-colors + On some text-only terminals, bold face and inverse video together +result in text that is hard to read. Call the function +@code{tty-suppress-bold-inverse-default-colors} with a non-@code{nil} +argument to suppress the effect of bold-face in this case. + +@vindex no-redraw-on-reenter + On a text-only terminal, when you reenter Emacs after suspending, Emacs +normally clears the screen and redraws the entire display. On some +terminals with more than one page of memory, it is possible to arrange +the termcap entry so that the @samp{ti} and @samp{te} strings (output +to the terminal when Emacs is entered and exited, respectively) switch +between pages of memory so as to use one page for Emacs and another +page for other output. On such terminals, you might want to set the variable +@code{no-redraw-on-reenter} non-@code{nil}; this tells Emacs to +assume, when resumed, that the screen page it is using still contains +what Emacs last wrote there. + +@ignore + arch-tag: 2219f910-2ff0-4521-b059-1bd231a536c4 +@end ignore diff --git a/doc/emacs/doclicense.texi b/doc/emacs/doclicense.texi new file mode 100644 index 00000000000..83e9d6b5579 --- /dev/null +++ b/doc/emacs/doclicense.texi @@ -0,0 +1,416 @@ +@c -*-texinfo-*- +@center Version 1.2, November 2002 + +@display +Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +@end display +@sp 1 +@enumerate 0 +@item +PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document ``free'' in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of ``copyleft,'' which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + +@sp 1 +@item +APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document,'' below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you.'' You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A ``Modified Version'' of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A ``Secondary Section'' is a named appendix or a front-matter section of +the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall subject +(or to related matters) and contains nothing that could fall directly +within that overall subject. (Thus, if the Document is in part a +textbook of mathematics, a Secondary Section may not explain any +mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The ``Invariant Sections'' are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The ``Cover Texts'' are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A ``Transparent'' copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque.'' + + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input format, SGML +or XML using a publicly available DTD, and standard-conforming simple +HTML, PostScript or PDF designed for human modification. Examples of +transparent image formats include PNG, XCF and JPG. Opaque formats +include proprietary formats that can be read and edited only by +proprietary word processors, SGML or XML for which the DTD and/or +processing tools are not generally available, and the +machine-generated HTML, PostScript or PDF produced by some word +processors for output purposes only. + +The ``Title Page'' means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, ``Title Page'' means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements,'' +``Dedications,'' ``Endorsements,'' or ``History.'') To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. +@sp 1 +@item +VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. +@sp 1 +@item +COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. +@sp 1 +@item +MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission.@* +B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of the + Document (all of its principal authors, if it has fewer than five), + unless they release you from this requirement.@* +C. State on the Title page the name of the publisher of the + Modified Version, as the publisher.@* +D. Preserve all the copyright notices of the Document.@* +E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices.@* +F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below.@* +G. Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document's license notice.@* +H. Include an unaltered copy of this License.@* +I. Preserve the section Entitled ``History,'' Preserve its Title, and add + to it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. If + there is no section Entitled ``History'' in the Document, create one + stating the title, year, authors, and publisher of the Document as + given on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence.@* +J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the ``History'' section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission.@* +K. For any section Entitled ``Acknowledgements'' or ``Dedications,'' + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein.@* +L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles.@* +M. Delete any section Entitled ``Endorsements.'' Such a section + may not be included in the Modified Version.@* +N. Do not retitle any existing section to be Entitled ``Endorsements'' + or to conflict in title with any Invariant Section.@* +O. Preserve any Warranty Disclaimers.@* +@sp 1 +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled ``Endorsements,'' provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. +@sp 1 +@item +COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements,'' +and any sections Entitled ``Dedications.'' You must delete all sections +Entitled ``Endorsements.'' +@sp 1 +@item +COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. +@sp 1 +@item +AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. +@sp 1 +@item +TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements,'' +``Dedications,'' or ``History,'' the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. +@sp 1 +@item +TERMINATION + +You may not copy, modify, sublicense, or distribute the Document except +as expressly provided for under this License. Any other attempt to +copy, modify, sublicense or distribute the Document is void, and will +automatically terminate your rights under this License. However, +parties who have received copies, or rights, from you under this +License will not have their licenses terminated so long as such +parties remain in full compliance. +@sp 1 +@item +FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +http://www.gnu.org/copyleft/. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License ``or any later version'' applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. + +@end enumerate + +@unnumberedsec ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + +@smallexample +@group +Copyright (C) @var{year} @var{your name}. +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 +or any later version published by the Free Software Foundation; +with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. +A copy of the license is included in the section entitled ``GNU +Free Documentation License.'' +@end group +@end smallexample + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with...Texts.'' line with this: + +@smallexample +@group +with the Invariant Sections being @var{list their titles}, with the +Front-Cover Texts being @var{list}, and with the Back-Cover Texts being +@var{list}. +@end group +@end smallexample + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. + +@ignore + arch-tag: c1679162-1d8a-4f02-bc52-2e71765f0165 +@end ignore diff --git a/doc/emacs/emacs-xtra.texi b/doc/emacs/emacs-xtra.texi new file mode 100644 index 00000000000..841c62a527f --- /dev/null +++ b/doc/emacs/emacs-xtra.texi @@ -0,0 +1,126 @@ +\input texinfo @c -*-texinfo-*- +@comment %**start of header +@setfilename ../info/emacs-xtra +@settitle Specialized Emacs Features +@syncodeindex fn cp +@syncodeindex vr cp +@syncodeindex ky cp +@comment %**end of header + +@copying +This manual describes specialized features of Emacs. + +Copyright @copyright{} 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover texts being ``A GNU +Manual,'' and with the Back-Cover Texts as in (a) below. A copy of the +license is included in the section entitled ``GNU Free Documentation +License'' in the Emacs manual. + +(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify +this GNU Manual, like GNU software. Copies published by the Free +Software Foundation raise funds for GNU development.'' + +This document is part of a collection distributed under the GNU Free +Documentation License. If you want to distribute this document +separately from the collection, you can do so by adding a copy of the +license to the document, as described in section 6 of the license. +@end quotation +@end copying + +@dircategory Emacs +@direntry +* Emacs-Xtra: (emacs-xtra). Specialized Emacs features. +@end direntry + +@titlepage +@title Specialized Emacs Features +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@contents + +@ifnottex +@node Top +@top Specialized Emacs Features + +@insertcopying + +@end ifnottex + +@menu +* Introduction:: What documentation belongs here? +@iftex +* Picture Mode:: Editing pictures made up of characters using + the quarter-plane screen model. + +* Autorevert:: Auto Reverting non-file buffers. +* Subdir Switches:: Subdirectory switches in Dired. +* Advanced Calendar/Diary Usage:: Advanced Calendar/Diary customization. +* Emerge:: A convenient way of merging two versions of a program. +* Advanced VC Usage:: Advanced VC (version control) features. +* Fortran:: Fortran mode and its special features. +* MS-DOS:: Using Emacs on MS-DOS (otherwise known as @dfn{MS-DOG}). +@end iftex +* Index:: +@end menu + +@node Introduction +@unnumbered Introduction + +This manual contains detailed information about various features that +are too specialized to be included in the printed Emacs manual. It is +intended to be readable by anyone having a basic knowledge of Emacs. +However, certain sections may be intended for a more specialized +audience, such as Elisp authors. This should be clearly pointed out +at the beginning of these sections. + +Certain packages, or collections of related features, have their own +manuals, separate from the main Emacs User's manual. This manual is +intended as a complement, rather than an alternative, to reading those +additional manuals; in a nutshell, it is a collection of smaller +specialized features, too small or too obscure to justify their own +manual. + +Sections intended specifically for Elisp programmers can follow the +style of the Elisp manual. Other sections should follow the style of +the Emacs manual. + +@iftex +@c ``Picture Mode'' is a chapter, not a section, so it's outside @raisesections. +@include picture-xtra.texi + +@raisesections +@include arevert-xtra.texi + +@include dired-xtra.texi + +@include cal-xtra.texi + +@include emerge-xtra.texi + +@include vc-xtra.texi + +@include fortran-xtra.texi + +@include msdog-xtra.texi + +@lowersections +@end iftex + +@node Index +@unnumbered Index + +@printindex cp + +@bye + +@ignore + arch-tag: 75c33f13-32c6-41b6-9537-847a312e2e49 +@end ignore diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi new file mode 100644 index 00000000000..1e6fd8461c3 --- /dev/null +++ b/doc/emacs/emacs.texi @@ -0,0 +1,1365 @@ +\input texinfo + +@setfilename ../info/emacs +@settitle GNU Emacs Manual + +@c The edition number appears in several places in this file +@set EDITION Sixteenth +@set EMACSVER 23.0.50 + +@copying +This is the @value{EDITION} edition of the @cite{GNU Emacs Manual},@* +updated for Emacs version @value{EMACSVER}. + +Copyright @copyright{} 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, +1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software +Foundation, Inc. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with the +Invariant Sections being ``The GNU Manifesto,'' ``Distribution'' and +``GNU GENERAL PUBLIC LICENSE,'' with the Front-Cover texts being ``A GNU +Manual,'' and with the Back-Cover Texts as in (a) below. A copy of the +license is included in the section entitled ``GNU Free Documentation +License.'' + +(a) The FSF's Back-Cover Text is: ``You are free to copy and modify +this GNU Manual. Buying copies from GNU Press supports the FSF in +developing GNU and promoting software freedom.'' +@end quotation +@end copying + +@dircategory Emacs +@direntry +* Emacs: (emacs). The extensible self-documenting text editor. +@end direntry + +@c in general, keep the following line commented out, unless doing a +@c copy of this manual that will be published. The manual should go +@c onto the distribution in the full, 8.5 x 11" size. +@c set smallbook + +@ifset smallbook +@smallbook +@end ifset + +@c per rms and peterb, use 10pt fonts for the main text, mostly to +@c save on paper cost. +@c Do this inside @tex for now, so current makeinfo does not complain. +@tex +@ifset smallbook +@fonttextsize 10 +@set EMACSVER 22 +\global\let\urlcolor=\Black % don't print links in grayscale +\global\let\linkcolor=\Black +@end ifset +\global\hbadness=6666 % don't worry about not-too-underfull boxes +@end tex + +@defcodeindex op +@synindex pg cp + +@iftex +@kbdinputstyle code + +@shorttitlepage GNU Emacs Manual +@end iftex + +@titlepage +@sp 6 +@center @titlefont{GNU Emacs Manual} +@sp 4 +@center @value{EDITION} Edition, Updated for Emacs Version @value{EMACSVER}. +@sp 5 +@center Richard Stallman +@page +@vskip 0pt plus 1filll +@insertcopying + +@sp 2 +Published by the Free Software Foundation @* +51 Franklin Street, Fifth Floor @* +Boston, MA 02110-1301 USA @* +ISBN 1-882114-86-8 + +@sp 2 +Cover art by Etienne Suvasa. + +@end titlepage + + +@summarycontents +@contents + + +@ifnottex +@node Top, Distrib, (dir), (dir) +@top The Emacs Editor + +Emacs is the extensible, customizable, self-documenting real-time +display editor. This Info file describes how to edit with Emacs and +some of how to customize it; it corresponds to GNU Emacs version +@value{EMACSVER}. + +@ifinfo +To learn more about the Info documentation system, type @kbd{h}, and +Emacs will take you to a programmed instruction sequence for the Info +commands. +@end ifinfo + +For information on extending Emacs, see @ref{Top, Emacs Lisp,, elisp, The +Emacs Lisp Reference Manual}. +@end ifnottex + +@ignore +These subcategories have been deleted for simplicity +and to avoid conflicts. +Completion +Backup Files +Auto-Saving: Protection Against Disasters +Snapshots +Text Mode +Outline Mode +@TeX{} Mode +Formatted Text +Shell Command History + +The ones for Dired and Rmail have had the items turned into :: items +to avoid conflicts. +Also Running Shell Commands from Emacs +and Sending Mail and Registers and Minibuffer. +@end ignore + +@menu +* Distrib:: How to get the latest Emacs distribution. +* Copying:: The GNU General Public License gives you permission + to redistribute GNU Emacs on certain terms; + it also explains that there is no warranty. +* GNU Free Documentation License:: The license for this documentation. +* Intro:: An introduction to Emacs concepts. +* Glossary:: The glossary. +* Antinews:: Information about Emacs version 21. +* Mac OS:: Using Emacs in the Mac. +* Microsoft Windows:: Using Emacs on Microsoft Windows and MS-DOS. +* Manifesto:: What's GNU? Gnu's Not Unix! +* Acknowledgments:: Major contributors to GNU Emacs. + +Indexes (each index contains a large menu) +* Key Index:: An item for each standard Emacs key sequence. +* Option Index:: An item for every command-line option. +* Command Index:: An item for each command name. +* Variable Index:: An item for each documented variable. +* Concept Index:: An item for each concept. + +Important General Concepts +* Screen:: How to interpret what you see on the screen. +* User Input:: Kinds of input events (characters, buttons, + function keys). +* Keys:: Key sequences: what you type to request one + editing action. +* Commands:: Named functions run by key sequences to do editing. +* Text Characters:: Character set for text (the contents of buffers + and strings). +* Entering Emacs:: Starting Emacs from the shell. +* Exiting:: Stopping or killing Emacs. +* Emacs Invocation:: Hairy startup options. + +Fundamental Editing Commands +* Basic:: The most basic editing commands. +* Minibuffer:: Entering arguments that are prompted for. +* M-x:: Invoking commands by their names. +* Help:: Commands for asking Emacs about its commands. + +Important Text-Changing Commands +* Mark:: The mark: how to delimit a ``region'' of text. +* Killing:: Killing (cutting) text. +* Yanking:: Recovering killed text. Moving text. (Pasting.) +* Accumulating Text:: Other ways of copying text. +* Rectangles:: Operating on the text inside a rectangle on the screen. +* Registers:: Saving a text string or a location in the buffer. +* Display:: Controlling what text is displayed. +* Search:: Finding or replacing occurrences of a string. +* Fixit:: Commands especially useful for fixing typos. +* Keyboard Macros:: A keyboard macro records a sequence of + keystrokes to be replayed with a single command. + +Major Structures of Emacs +* Files:: All about handling files. +* Buffers:: Multiple buffers; editing several files at once. +* Windows:: Viewing two pieces of text at once. +* Frames:: Running the same Emacs session in multiple X windows. +* International:: Using non-@acronym{ASCII} character sets (the MULE features). + +Advanced Features +* Major Modes:: Text mode vs. Lisp mode vs. C mode ... +* Indentation:: Editing the white space at the beginnings of lines. +* Text:: Commands and modes for editing English. +* Programs:: Commands and modes for editing programs. +* Building:: Compiling, running and debugging programs. +* Maintaining:: Features for maintaining large programs. +* Abbrevs:: How to define text abbreviations to reduce + the number of characters you must type. +@ifnottex +* Picture Mode:: Editing pictures made up of characters using + the quarter-plane screen model. +@end ifnottex +* Sending Mail:: Sending mail in Emacs. +* Rmail:: Reading mail in Emacs. +* Dired:: You can ``edit'' a directory to manage files in it. +* Calendar/Diary:: The calendar and diary facilities. +* Gnus:: How to read netnews with Emacs. +* Shell:: Executing shell commands from Emacs. +* Emacs Server:: Using Emacs as an editing server for @code{mail}, etc. +* Printing:: Printing hardcopies of buffers or regions. +* Sorting:: Sorting lines, paragraphs or pages within Emacs. +* Narrowing:: Restricting display and editing to a portion + of the buffer. +* Two-Column:: Splitting apart columns to edit them + in side-by-side windows. +* Editing Binary Files::Using Hexl mode to edit binary files. +* Saving Emacs Sessions:: Saving Emacs state from one session to the next. +* Recursive Edit:: A command can allow you to do editing + "within the command". This is called a + "recursive editing level". +* Emulation:: Emulating some other editors with Emacs. +* Hyperlinking:: Following links in buffers. +* Dissociated Press:: Dissociating text for fun. +* Amusements:: Various games and hacks. +* Customization:: Modifying the behavior of Emacs. +* X Resources:: X resources for customizing Emacs. + +Recovery from Problems +* Quitting:: Quitting and aborting. +* Lossage:: What to do if Emacs is hung or malfunctioning. +* Bugs:: How and when to report a bug. +* Contributing:: How to contribute improvements to Emacs. +* Service:: How to get help for your own Emacs needs. + +@c Do NOT modify the following 3 lines! They must have this form to +@c be correctly identified by `texinfo-multiple-files-update'. In +@c particular, the detailed menu header line MUST be identical to the +@c value of `texinfo-master-menu-header'. See texnfo-upd.el. + +@detailmenu + --- The Detailed Node Listing --- + --------------------------------- + +Here are some other nodes which are really inferiors of the ones +already listed, mentioned here so you can get to them in one step: + +The Organization of the Screen + +* Point:: The place in the text where editing commands operate. +* Echo Area:: Short messages appear at the bottom of the screen. +* Mode Line:: Interpreting the mode line. +* Menu Bar:: How to use the menu bar. + +Basic Editing Commands + +* Inserting Text:: Inserting text by simply typing it. +* Moving Point:: How to move the cursor to the place where you want to + change something. +* Erasing:: Deleting and killing text. +* Basic Undo:: Undoing recent changes in the text. +* Basic Files:: Visiting, creating, and saving files. +* Basic Help:: Asking what a character does. +* Blank Lines:: Commands to make or delete blank lines. +* Continuation Lines:: Lines too wide for the screen. +* Position Info:: What page, line, row, or column is point on? +* Arguments:: Numeric arguments for repeating a command. +* Repeating:: A short-cut for repeating the previous command. + +The Minibuffer + +* Minibuffer File:: Entering file names with the minibuffer. +* Minibuffer Edit:: How to edit in the minibuffer. +* Completion:: An abbreviation facility for minibuffer input. +* Minibuffer History:: Reusing recent minibuffer arguments. +* Repetition:: Re-executing commands that used the minibuffer. + +Completion + +* Example: Completion Example. Examples of using completion. +* Commands: Completion Commands. A list of completion commands. +* Strict Completion:: Different types of completion. +* Options: Completion Options. Options for completion. + +Help + +* Help Summary:: Brief list of all Help commands. +* Key Help:: Asking what a key does in Emacs. +* Name Help:: Asking about a command, variable or function name. +* Apropos:: Asking what pertains to a given topic. +* Help Mode:: Special features of Help mode and Help buffers. +* Library Keywords:: Finding Lisp libraries by keywords (topics). +* Language Help:: Help relating to international language support. +* Misc Help:: Other help commands. +* Help Files:: Commands to display pre-written help files. +* Help Echo:: Help on active text and tooltips (`balloon help') + +The Mark and the Region + +* Setting Mark:: Commands to set the mark. +* Transient Mark:: How to make Emacs highlight the region-- + when there is one. +* Momentary Mark:: Enabling Transient Mark mode momentarily. +* Using Region:: Summary of ways to operate on contents of the region. +* Marking Objects:: Commands to put region around textual units. +* Mark Ring:: Previous mark positions saved so you can go back there. +* Global Mark Ring:: Previous mark positions in various buffers. + +Killing and Moving Text + +* Deletion:: Commands for deleting small amounts of text and + blank areas. +* Killing by Lines:: How to kill entire lines of text at one time. +* Other Kill Commands:: Commands to kill large regions of text and + syntactic units such as words and sentences. +* CUA Bindings:: Using @kbd{C-x}, @kbd{C-c}, @kbd{C-v} for copy + and paste, with enhanced rectangle support. + +Yanking + +* Kill Ring:: Where killed text is stored. Basic yanking. +* Appending Kills:: Several kills in a row all yank together. +* Earlier Kills:: Yanking something killed some time ago. + +Registers + +* RegPos:: Saving positions in registers. +* RegText:: Saving text in registers. +* RegRect:: Saving rectangles in registers. +* RegConfig:: Saving window configurations in registers. +* RegNumbers:: Numbers in registers. +* RegFiles:: File names in registers. +* Bookmarks:: Bookmarks are like registers, but persistent. + +Controlling the Display + +* Scrolling:: Moving text up and down in a window. +* Auto Scrolling:: Redisplay scrolls text automatically when needed. +* Horizontal Scrolling:: Moving text left and right in a window. +* Follow Mode:: Follow mode lets two windows scroll as one. +* Faces:: How to change the display style using faces. +* Standard Faces:: Emacs' predefined faces. +* Font Lock:: Minor mode for syntactic highlighting using faces. +* Highlight Interactively:: Tell Emacs what text to highlight. +* Fringes:: Enabling or disabling window fringes. +* Displaying Boundaries:: Displaying top and bottom of the buffer. +* Useless Whitespace:: Showing possibly-spurious trailing whitespace. +* Selective Display:: Hiding lines with lots of indentation. +* Optional Mode Line:: Optional mode line display features. +* Text Display:: How text characters are normally displayed. +* Cursor Display:: Features for displaying the cursor. +* Line Truncation:: Truncating lines to fit the screen width instead + of continuing them to multiple screen lines. +* Display Custom:: Information on variables for customizing display. + +Searching and Replacement + +* Incremental Search:: Search happens as you type the string. +* Nonincremental Search:: Specify entire string and then search. +* Word Search:: Search for sequence of words. +* Regexp Search:: Search for match for a regexp. +* Regexps:: Syntax of regular expressions. +* Regexp Backslash:: Regular expression constructs starting with `\'. +* Regexp Example:: A complex regular expression explained. +* Search Case:: To ignore case while searching, or not. +* Replace:: Search, and replace some or all matches. +* Other Repeating Search:: Operating on all matches for some regexp. + +Incremental Search + +* Basic Isearch:: Basic incremental search commands. +* Repeat Isearch:: Searching for the same string again. +* Error in Isearch:: When your string is not found. +* Special Isearch:: Special input in incremental search. +* Non-ASCII Isearch:: How to search for non-ASCII characters. +* Isearch Yank:: Commands that grab text into the search string + or else edit the search string. +* Highlight Isearch:: Isearch highlights the other possible matches. +* Isearch Scroll:: Scrolling during an incremental search. +* Slow Isearch:: Incremental search features for slow terminals. + +Replacement Commands + +* Unconditional Replace:: Replacing all matches for a string. +* Regexp Replace:: Replacing all matches for a regexp. +* Replacement and Case:: How replacements preserve case of letters. +* Query Replace:: How to use querying. + +Commands for Fixing Typos + +* Undo:: Full details of Emacs undo commands. +* Kill Errors:: Commands to kill a batch of recently entered text. +* Transpose:: Exchanging two characters, words, lines, lists... +* Fixing Case:: Correcting case of last word entered. +* Spelling:: Apply spelling checker to a word or a whole buffer. + +Keyboard Macros + +* Basic Keyboard Macro:: Defining and running keyboard macros. +* Keyboard Macro Ring:: Where previous keyboard macros are saved. +* Keyboard Macro Counter:: Inserting incrementing numbers in macros. +* Keyboard Macro Query:: Making keyboard macros do different things each time. +* Save Keyboard Macro:: Giving keyboard macros names; saving them in files. +* Edit Keyboard Macro:: Editing keyboard macros. +* Keyboard Macro Step-Edit:: Interactively executing and editing a keyboard + macro. + +File Handling + +* File Names:: How to type and edit file-name arguments. +* Visiting:: Visiting a file prepares Emacs to edit the file. +* Saving:: Saving makes your changes permanent. +* Reverting:: Reverting cancels all the changes not saved. +* Autorevert:: Auto Reverting non-file buffers. +* Auto Save:: Auto Save periodically protects against loss of data. +* File Aliases:: Handling multiple names for one file. +* Version Control:: Version control systems (RCS, CVS and SCCS). +* Directories:: Creating, deleting, and listing file directories. +* Comparing Files:: Finding where two files differ. +* Diff Mode:: Editing diff output. +* Misc File Ops:: Other things you can do on files. +* Compressed Files:: Accessing compressed files. +* File Archives:: Operating on tar, zip, jar etc. archive files. +* Remote Files:: Accessing files on other sites. +* Quoted File Names:: Quoting special characters in file names. +* File Name Cache:: Completion against a list of files you often use. +* File Conveniences:: Convenience Features for Finding Files. +* Filesets:: Handling sets of files. + +Saving Files + +* Save Commands:: Commands for saving files. +* Backup:: How Emacs saves the old version of your file. +* Customize Save:: Customizing the saving of files. +* Interlocking:: How Emacs protects against simultaneous editing + of one file by two users. +* File Shadowing:: Copying files to "shadows" automatically. +* Time Stamps:: Emacs can update time stamps on saved files. + +Backup Files + +* One or Many: Numbered Backups. Whether to make one backup file or many. +* Names: Backup Names. How backup files are named. +* Deletion: Backup Deletion. Emacs deletes excess numbered backups. +* Copying: Backup Copying. Backups can be made by copying or renaming. + +Auto-Saving: Protection Against Disasters + +* Files: Auto Save Files. The file where auto-saved changes are + actually made until you save the file. +* Control: Auto Save Control. Controlling when and how often to auto-save. +* Recover:: Recovering text from auto-save files. + +Version Control + +* Introduction to VC:: How version control works in general. +* VC Mode Line:: How the mode line shows version control status. +* Basic VC Editing:: How to edit a file under version control. +* Old Versions:: Examining and comparing old versions. +* Secondary VC Commands:: The commands used a little less frequently. +* Branches:: Multiple lines of development. +* Remote Repositories:: Efficient access to remote CVS servers. +* Snapshots:: Sets of file versions treated as a unit. +* Miscellaneous VC:: Various other commands and features of VC. +* Customizing VC:: Variables that change VC's behavior. + +Using Multiple Buffers + +* Select Buffer:: Creating a new buffer or reselecting an old one. +* List Buffers:: Getting a list of buffers that exist. +* Misc Buffer:: Renaming; changing read-onliness; copying text. +* Kill Buffer:: Killing buffers you no longer need. +* Several Buffers:: How to go through the list of all buffers + and operate variously on several of them. +* Indirect Buffers:: An indirect buffer shares the text of another buffer. +* Buffer Convenience:: Convenience and customization features for + buffer handling. + +Multiple Windows + +* Basic Window:: Introduction to Emacs windows. +* Split Window:: New windows are made by splitting existing windows. +* Other Window:: Moving to another window or doing something to it. +* Pop Up Window:: Finding a file or buffer in another window. +* Force Same Window:: Forcing certain buffers to appear in the selected + window rather than in another window. +* Change Window:: Deleting windows and changing their sizes. +* Window Convenience:: Convenience functions for window handling. + +Frames and Graphical Displays + +* Cut and Paste:: Mouse commands for cut and paste. +* Mouse References:: Using the mouse to select an item from a list. +* Menu Mouse Clicks:: Mouse clicks that bring up menus. +* Mode Line Mouse:: Mouse clicks on the mode line. +* Creating Frames:: Creating additional Emacs frames with various contents. +* Frame Commands:: Iconifying, deleting, and switching frames. +* Speedbar:: How to make and use a speedbar frame. +* Multiple Displays:: How one Emacs job can talk to several displays. +* Special Buffer Frames:: You can make certain buffers have their own frames. +* Frame Parameters:: Changing the colors and other modes of frames. +* Scroll Bars:: How to enable and disable scroll bars; how to use them. +* Wheeled Mice:: Using mouse wheels for scrolling. +* Drag and Drop:: Using drag and drop to open files and insert text. +* Menu Bars:: Enabling and disabling the menu bar. +* Tool Bars:: Enabling and disabling the tool bar. +* Dialog Boxes:: Controlling use of dialog boxes. +* Tooltips:: Showing "tooltips", AKA "balloon help" for active text. +* Mouse Avoidance:: Moving the mouse pointer out of the way. +* Non-Window Terminals:: Multiple frames on terminals that show only one. +* Text-Only Mouse:: Using the mouse in text-only terminals. + +International Character Set Support + +* International Chars:: Basic concepts of multibyte characters. +* Enabling Multibyte:: Controlling whether to use multibyte characters. +* Language Environments:: Setting things up for the language you use. +* Input Methods:: Entering text characters not on your keyboard. +* Select Input Method:: Specifying your choice of input methods. +* Multibyte Conversion:: How single-byte characters convert to multibyte. +* Coding Systems:: Character set conversion when you read and + write files, and so on. +* Recognize Coding:: How Emacs figures out which conversion to use. +* Specify Coding:: Specifying a file's coding system explicitly. +* Output Coding:: Choosing coding systems for output. +* Text Coding:: Choosing conversion to use for file text. +* Communication Coding:: Coding systems for interprocess communication. +* File Name Coding:: Coding systems for file @emph{names}. +* Terminal Coding:: Specifying coding systems for converting + terminal input and output. +* Fontsets:: Fontsets are collections of fonts + that cover the whole spectrum of characters. +* Defining Fontsets:: Defining a new fontset. +* Undisplayable Characters::When characters don't display. +* Unibyte Mode:: You can pick one European character set + to use without multibyte characters. +* Charsets:: How Emacs groups its internal character codes. + +Major Modes + +* Choosing Modes:: How major modes are specified or chosen. + +Indentation + +* Indentation Commands:: Various commands and techniques for indentation. +* Tab Stops:: You can set arbitrary "tab stops" and then + indent to the next tab stop when you want to. +* Just Spaces:: You can request indentation using just spaces. + +Commands for Human Languages + +* Words:: Moving over and killing words. +* Sentences:: Moving over and killing sentences. +* Paragraphs:: Moving over paragraphs. +* Pages:: Moving over pages. +* Filling:: Filling or justifying text. +* Case:: Changing the case of text. +* Text Mode:: The major modes for editing text files. +* Outline Mode:: Editing outlines. +* TeX Mode:: Editing input to the formatter TeX. +* HTML Mode:: Editing HTML, SGML, and XML files. +* Nroff Mode:: Editing input to the formatter nroff. +* Formatted Text:: Editing formatted text directly in WYSIWYG fashion. +* Text Based Tables:: Editing text-based tables in WYSIWYG fashion. + +Filling Text + +* Auto Fill:: Auto Fill mode breaks long lines automatically. +* Refill:: Keeping paragraphs filled. +* Fill Commands:: Commands to refill paragraphs and center lines. +* Fill Prefix:: Filling paragraphs that are indented + or in a comment, etc. +* Adaptive Fill:: How Emacs can determine the fill prefix automatically. +* Longlines:: Editing text with very long lines. + +Outline Mode + +* Format: Outline Format. What the text of an outline looks like. +* Motion: Outline Motion. Special commands for moving through + outlines. +* Visibility: Outline Visibility. Commands to control what is visible. +* Views: Outline Views. Outlines and multiple views. +* Foldout:: Folding means zooming in on outlines. + +@TeX{} Mode + +* Editing: TeX Editing. Special commands for editing in TeX mode. +* LaTeX: LaTeX Editing. Additional commands for LaTeX input files. +* Printing: TeX Print. Commands for printing part of a file with TeX. +* Misc: TeX Misc. Customization of TeX mode, and related features. + +Editing Formatted Text + +* Requesting Formatted Text:: Entering and exiting Enriched mode. +* Hard and Soft Newlines:: There are two different kinds of newlines. +* Editing Format Info:: How to edit text properties. +* Faces: Format Faces. Bold, italic, underline, etc. +* Color: Format Colors. Changing the color of text. +* Indent: Format Indentation. Changing the left and right margins. +* Justification: Format Justification. + Centering, setting text flush with the + left or right margin, etc. +* Other: Format Properties. The "special" text properties submenu. +* Forcing Enriched Mode:: How to force use of Enriched mode. + +Editing Text-based Tables + +* Table Definition:: What is a text based table. +* Table Creation:: How to create a table. +* Table Recognition:: How to activate and deactivate tables. +* Cell Commands:: Cell-oriented commands in a table. +* Cell Justification:: Justifying cell contents. +* Row Commands:: Manipulating rows of table cell. +* Column Commands:: Manipulating columns of table cell. +* Fixed Width Mode:: Fixing cell width. +* Table Conversion:: Converting between plain text and tables. +* Measuring Tables:: Analyzing table dimension. +* Table Misc:: Table miscellany. + +Editing Programs + +* Program Modes:: Major modes for editing programs. +* Defuns:: Commands to operate on major top-level parts + of a program. +* Program Indent:: Adjusting indentation to show the nesting. +* Parentheses:: Commands that operate on parentheses. +* Comments:: Inserting, killing, and aligning comments. +* Documentation:: Getting documentation of functions you plan to call. +* Hideshow:: Displaying blocks selectively. +* Symbol Completion:: Completion on symbol names of your program or language. +* Glasses:: Making identifiersLikeThis more readable. +* Misc for Programs:: Other Emacs features useful for editing programs. +* C Modes:: Special commands of C, C++, Objective-C, + Java, and Pike modes. +* Asm Mode:: Asm mode and its special features. +* Fortran:: Fortran mode and its special features. + +Top-Level Definitions, or Defuns + +* Left Margin Paren:: An open-paren or similar opening delimiter + starts a defun if it is at the left margin. +* Moving by Defuns:: Commands to move over or mark a major definition. +* Imenu:: Making buffer indexes as menus. +* Which Function:: Which Function mode shows which function you are in. + +Indentation for Programs + +* Basic Indent:: Indenting a single line. +* Multi-line Indent:: Commands to reindent many lines at once. +* Lisp Indent:: Specifying how each Lisp function should be indented. +* C Indent:: Extra features for indenting C and related modes. +* Custom C Indent:: Controlling indentation style for C and related modes. + +Commands for Editing with Parentheses + +* Expressions:: Expressions with balanced parentheses. +* Moving by Parens:: Commands for moving up, down and across + in the structure of parentheses. +* Matching:: Insertion of a close-delimiter flashes matching open. + +Manipulating Comments + +* Comment Commands:: Inserting, killing, and aligning comments. +* Multi-Line Comments:: Commands for adding and editing multi-line comments. +* Options for Comments::Customizing the comment features. + +Documentation Lookup + +* Info Lookup:: Looking up library functions and commands + in Info files. +* Man Page:: Looking up man pages of library functions and commands. +* Lisp Doc:: Looking up Emacs Lisp functions, etc. + +C and Related Modes + +* Motion in C:: Commands to move by C statements, etc. +* Electric C:: Colon and other chars can automatically reindent. +* Hungry Delete:: A more powerful DEL command. +* Other C Commands:: Filling comments, viewing expansion of macros, + and other neat features. + +Compiling and Testing Programs + +* Compilation:: Compiling programs in languages other + than Lisp (C, Pascal, etc.). +* Compilation Mode:: The mode for visiting compiler errors. +* Compilation Shell:: Customizing your shell properly + for use in the compilation buffer. +* Grep Searching:: Searching with grep. +* Flymake:: Finding syntax errors on the fly. +* Debuggers:: Running symbolic debuggers for non-Lisp programs. +* Executing Lisp:: Various modes for editing Lisp programs, + with different facilities for running + the Lisp programs. +* Lisp Libraries:: Creating Lisp programs to run in Emacs. +* Lisp Eval:: Executing a single Lisp expression in Emacs. +* Lisp Interaction:: Executing Lisp in an Emacs buffer. +* External Lisp:: Communicating through Emacs with a separate Lisp. + +Running Debuggers Under Emacs + +* Starting GUD:: How to start a debugger subprocess. +* Debugger Operation:: Connection between the debugger and source buffers. +* Commands of GUD:: Key bindings for common commands. +* GUD Customization:: Defining your own commands for GUD. +* GDB Graphical Interface:: An enhanced mode that uses GDB features to + implement a graphical debugging environment through + Emacs. + +Maintaining Large Programs + +* Change Log:: Maintaining a change history for your program. +* Format of ChangeLog:: What the change log file looks like. +* Tags:: Go direct to any function in your program in one + command. Tags remembers which file it is in. +* Emerge:: A convenient way of merging two versions of a program. + +Tags Tables + +* Tag Syntax:: Tag syntax for various types of code and text files. +* Create Tags Table:: Creating a tags table with @code{etags}. +* Etags Regexps:: Create arbitrary tags using regular expressions. +* Select Tags Table:: How to visit a tags table. +* Find Tag:: Commands to find the definition of a specific tag. +* Tags Search:: Using a tags table for searching and replacing. +* List Tags:: Listing and finding tags defined in a file. + +Abbrevs + +* Abbrev Concepts:: Fundamentals of defined abbrevs. +* Defining Abbrevs:: Defining an abbrev, so it will expand when typed. +* Expanding Abbrevs:: Controlling expansion: prefixes, canceling expansion. +* Editing Abbrevs:: Viewing or editing the entire list of defined abbrevs. +* Saving Abbrevs:: Saving the entire list of abbrevs for another session. +* Dynamic Abbrevs:: Abbreviations for words already in the buffer. +* Dabbrev Customization:: What is a word, for dynamic abbrevs. Case handling. + +@ifnottex +Editing Pictures + +* Basic Picture:: Basic concepts and simple commands of Picture Mode. +* Insert in Picture:: Controlling direction of cursor motion + after "self-inserting" characters. +* Tabs in Picture:: Various features for tab stops and indentation. +* Rectangles in Picture:: Clearing and superimposing rectangles. +@end ifnottex + +Sending Mail + +* Mail Format:: Format of the mail being composed. +* Mail Headers:: Details of permitted mail header fields. +* Mail Aliases:: Abbreviating and grouping mail addresses. +* Mail Mode:: Special commands for editing mail being composed. +* Mail Amusements:: Distract the NSA's attention; add a fortune to a msg. +* Mail Methods:: Using alternative mail-composition methods. + +Reading Mail with Rmail + +* Rmail Basics:: Basic concepts of Rmail, and simple use. +* Rmail Scrolling:: Scrolling through a message. +* Rmail Motion:: Moving to another message. +* Rmail Deletion:: Deleting and expunging messages. +* Rmail Inbox:: How mail gets into the Rmail file. +* Rmail Files:: Using multiple Rmail files. +* Rmail Output:: Copying message out to files. +* Rmail Labels:: Classifying messages by labeling them. +* Rmail Attributes:: Certain standard labels, called attributes. +* Rmail Reply:: Sending replies to messages you are viewing. +* Rmail Summary:: Summaries show brief info on many messages. +* Rmail Sorting:: Sorting messages in Rmail. +* Rmail Display:: How Rmail displays a message; customization. +* Rmail Coding:: How Rmail handles decoding character sets. +* Rmail Editing:: Editing message text and headers in Rmail. +* Rmail Digest:: Extracting the messages from a digest message. +* Out of Rmail:: Converting an Rmail file to mailbox format. +* Rmail Rot13:: Reading messages encoded in the rot13 code. +* Movemail:: More details of fetching new mail. +* Remote Mailboxes:: Retrieving Mail from Remote Mailboxes. +* Other Mailbox Formats:: Retrieving Mail from Local Mailboxes in + Various Formats + +Dired, the Directory Editor + +* Dired Enter:: How to invoke Dired. +* Dired Navigation:: How to move in the Dired buffer. +* Dired Deletion:: Deleting files with Dired. +* Flagging Many Files:: Flagging files based on their names. +* Dired Visiting:: Other file operations through Dired. +* Marks vs Flags:: Flagging for deletion vs marking. +* Operating on Files:: How to copy, rename, print, compress, etc. + either one file or several files. +* Shell Commands in Dired:: Running a shell command on the marked files. +* Transforming File Names:: Using patterns to rename multiple files. +* Comparison in Dired:: Running `diff' by way of Dired. +* Subdirectories in Dired:: Adding subdirectories to the Dired buffer. +* Subdir Switches:: Subdirectory switches in Dired. +* Subdirectory Motion:: Moving across subdirectories, and up and down. +* Hiding Subdirectories:: Making subdirectories visible or invisible. +* Dired Updating:: Discarding lines for files of no interest. +* Dired and Find:: Using `find' to choose the files for Dired. +* Wdired:: Operating on files by editing the Dired buffer. +* Image-Dired:: Viewing image thumbnails in Dired +* Misc Dired Features:: Various other features. + +The Calendar and the Diary + +* Calendar Motion:: Moving through the calendar; selecting a date. +* Scroll Calendar:: Bringing earlier or later months onto the screen. +* Counting Days:: How many days are there between two dates? +* General Calendar:: Exiting or recomputing the calendar. +* Writing Calendar Files:: Writing calendars to files of various formats. +* Holidays:: Displaying dates of holidays. +* Sunrise/Sunset:: Displaying local times of sunrise and sunset. +* Lunar Phases:: Displaying phases of the moon. +* Other Calendars:: Converting dates to other calendar systems. +* Diary:: Displaying events from your diary. +* Appointments:: Reminders when it's time to do something. +* Importing Diary:: Converting diary events to/from other formats. +* Daylight Saving:: How to specify when daylight saving time is active. +* Time Intervals:: Keeping track of time intervals. +* Advanced Calendar/Diary Usage:: Advanced Calendar/Diary customization. + +Movement in the Calendar + +* Calendar Unit Motion:: Moving by days, weeks, months, and years. +* Move to Beginning or End:: Moving to start/end of weeks, months, and years. +* Specified Dates:: Moving to the current date or another + specific date. + +Conversion To and From Other Calendars + +* Calendar Systems:: The calendars Emacs understands + (aside from Gregorian). +* To Other Calendar:: Converting the selected date to various calendars. +* From Other Calendar:: Moving to a date specified in another calendar. +* Mayan Calendar:: Moving to a date specified in a Mayan calendar. + +The Diary + +* Displaying the Diary:: Viewing diary entries and associated calendar dates. +* Format of Diary File:: Entering events in your diary. +* Date Formats:: Various ways you can specify dates. +* Adding to Diary:: Commands to create diary entries. +* Special Diary Entries:: Anniversaries, blocks of dates, cyclic entries, etc. + +Gnus + +* Buffers of Gnus:: The group, summary, and article buffers. +* Gnus Startup:: What you should know about starting Gnus. +* Summary of Gnus:: A short description of the basic Gnus commands. + +Running Shell Commands from Emacs + +* Single Shell:: How to run one shell command and return. +* Interactive Shell:: Permanent shell taking input via Emacs. +* Shell Mode:: Special Emacs commands used with permanent shell. +* Shell Prompts:: Two ways to recognize shell prompts. +* Shell History:: Repeating previous commands in a shell buffer. +* Directory Tracking:: Keeping track when the subshell changes directory. +* Shell Options:: Options for customizing Shell mode. +* Terminal emulator:: An Emacs window as a terminal emulator. +* Term Mode:: Special Emacs commands used in Term mode. +* Paging in Term:: Paging in the terminal emulator. +* Remote Host:: Connecting to another computer. + +Using Emacs as a Server + +* Invoking emacsclient:: Emacs client startup options. + +Printing Hard Copies + +* PostScript:: Printing buffers or regions as PostScript. +* PostScript Variables:: Customizing the PostScript printing commands. +* Printing Package:: An optional advanced printing interface. + +Hyperlinking and Navigation Features + +* Browse-URL:: Following URLs. +* Goto-address:: Activating URLs. +* FFAP:: Finding files etc. at point. + +Customization + +* Minor Modes:: Each minor mode is one feature you can turn on + independently of any others. +* Easy Customization:: Convenient way to browse and change user options. +* Variables:: Many Emacs commands examine Emacs variables + to decide what to do; by setting variables, + you can control their functioning. +* Key Bindings:: The keymaps say what command each key runs. + By changing them, you can "redefine keys". +* Syntax:: The syntax table controls how words and + expressions are parsed. +* Init File:: How to write common customizations in the + @file{.emacs} file. + +Variables + +* Examining:: Examining or setting one variable's value. +* Hooks:: Hook variables let you specify programs for parts + of Emacs to run on particular occasions. +* Locals:: Per-buffer values of variables. +* File Variables:: How files can specify variable values. + +Customizing Key Bindings + +* Keymaps:: Generalities. The global keymap. +* Prefix Keymaps:: Keymaps for prefix keys. +* Local Keymaps:: Major and minor modes have their own keymaps. +* Minibuffer Maps:: The minibuffer uses its own local keymaps. +* Rebinding:: How to redefine one key's meaning conveniently. +* Init Rebinding:: Rebinding keys with your init file, @file{.emacs}. +* Function Keys:: Rebinding terminal function keys. +* Named ASCII Chars:: Distinguishing @key{TAB} from @kbd{C-i}, and so on. +* Mouse Buttons:: Rebinding mouse buttons in Emacs. +* Disabling:: Disabling a command means confirmation is required + before it can be executed. This is done to protect + beginners from surprises. + +The Init File, @file{~/.emacs} + +* Init Syntax:: Syntax of constants in Emacs Lisp. +* Init Examples:: How to do some things with an init file. +* Terminal Init:: Each terminal type can have an init file. +* Find Init:: How Emacs finds the init file. +* Init Non-ASCII:: Using non-@acronym{ASCII} characters in an init file. + +Dealing with Emacs Trouble + +* DEL Does Not Delete:: What to do if @key{DEL} doesn't delete. +* Stuck Recursive:: `[...]' in mode line around the parentheses. +* Screen Garbled:: Garbage on the screen. +* Text Garbled:: Garbage in the text. +* Memory Full:: How to cope when you run out of memory. +* After a Crash:: Recovering editing in an Emacs session that crashed. +* Emergency Escape:: Emergency escape--- + What to do if Emacs stops responding. +* Total Frustration:: When you are at your wits' end. + +Reporting Bugs + +* Bug Criteria:: Have you really found a bug? +* Understanding Bug Reporting:: How to report a bug effectively. +* Checklist:: Steps to follow for a good bug report. +* Sending Patches:: How to send a patch for GNU Emacs. + +Command Line Arguments for Emacs Invocation + +* Action Arguments:: Arguments to visit files, load libraries, + and call functions. +* Initial Options:: Arguments that take effect while starting Emacs. +* Command Example:: Examples of using command line arguments. +* Resume Arguments:: Specifying arguments when you resume a running Emacs. +* Environment:: Environment variables that Emacs uses. +* Display X:: Changing the default display and using remote login. +* Font X:: Choosing a font for text, under X. +* Colors:: Choosing display colors. +* Window Size X:: Start-up window size, under X. +* Borders X:: Internal and external borders, under X. +* Title X:: Specifying the initial frame's title. +* Icons X:: Choosing what sort of icon to use, under X. +* Misc X:: Other display options. + +Environment Variables + +* General Variables:: Environment variables that all versions of Emacs use. +* Misc Variables:: Certain system specific variables. +* MS-Windows Registry:: An alternative to the environment on MS-Windows. + +X Options and Resources + +* Resources:: Using X resources with Emacs (in general). +* Table of Resources:: Table of specific X resources that affect Emacs. +* Face Resources:: X resources for customizing faces. +* Lucid Resources:: X resources for Lucid menus. +* LessTif Resources:: X resources for LessTif and Motif menus. +* GTK resources:: Resources for GTK widgets. + +Emacs and Mac OS + +* Mac Input:: Keyboard and mouse input on Mac. +* Mac International:: International character sets on Mac. +* Mac Environment Variables:: Setting environment variables for Emacs. +* Mac Directories:: Volumes and directories on Mac. +* Mac Font Specs:: Specifying fonts on Mac. +* Mac Functions:: Mac-specific Lisp functions. + +Emacs and Microsoft Windows/MS-DOS + +* Text and Binary:: Text files use CRLF to terminate lines. +* Windows Files:: File-name conventions on Windows. +* ls in Lisp:: Emulation of @code{ls} for Dired. +* Windows HOME:: Where Emacs looks for your @file{.emacs}. +* Windows Keyboard:: Windows-specific keyboard features. +* Windows Mouse:: Windows-specific mouse features. +* Windows Processes:: Running subprocesses on Windows. +* Windows Printing:: How to specify the printer on MS-Windows. +* Windows Misc:: Miscellaneous Windows features. +* MS-DOS:: Using Emacs on MS-DOS (otherwise known as @dfn{MS-DOG}). +@end detailmenu +@end menu + +@iftex +@unnumbered Preface + + This manual documents the use and simple customization of the Emacs +editor. Simple Emacs customizations do not require you to be a +programmer, but if you are not interested in customizing, you can +ignore the customization hints. + + This is primarily a reference manual, but can also be used as a +primer. If you are new to Emacs, we recommend you start with +the on-line, learn-by-doing tutorial, before reading the manual. To +run the tutorial, start Emacs and type @kbd{C-h t}. The tutorial +describes commands, tells you when to try them, and explains the +results. + + On first reading, just skim chapters 1 and 2, which describe the +notational conventions of the manual and the general appearance of the +Emacs display screen. Note which questions are answered in these +chapters, so you can refer back later. After reading chapter 4, you +should practice the commands shown there. The next few chapters +describe fundamental techniques and concepts that are used constantly. +You need to understand them thoroughly, so experiment with them +until you are fluent. + + Chapters 14 through 19 describe intermediate-level features that are +useful for many kinds of editing. Chapter 20 and following chapters +describe optional but useful features; read those chapters when you +need them. + + Read the Trouble chapter if Emacs does not seem to be working +properly. It explains how to cope with several common problems +(@pxref{Lossage}), as well as when and how to report Emacs bugs +(@pxref{Bugs}). + + To find the documentation of a particular command, look in the index. +Keys (character commands) and command names have separate indexes. +There is also a glossary, with a cross reference for each term. + + This manual is available as a printed book and also as an Info file. +The Info file is for on-line perusal with the Info program, which is +the principal means of accessing on-line documentation in the GNU +system. Both the Emacs Info file and an Info reader are included with +GNU Emacs. The Info file and the printed book contain substantially +the same text and are generated from the same source files, which are +also distributed with GNU Emacs. + + GNU Emacs is a member of the Emacs editor family. There are many +Emacs editors, all sharing common principles of organization. For +information on the underlying philosophy of Emacs and the lessons +learned from its development, see @cite{Emacs, the Extensible, +Customizable Self-Documenting Display Editor}, available from +@url{ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-519A.pdf}. + +This edition of the manual is intended for use with GNU Emacs +installed on GNU and Unix systems. GNU Emacs can also be used on VMS, +MS-DOS (also called MS-DOG), Microsoft Windows, and Macintosh systems. +Those systems use different file name syntax; in addition, VMS and +MS-DOS do not support all GNU Emacs features. @xref{Microsoft +Windows}, for information about using Emacs on Windows. +@xref{Mac OS}, for information about using Emacs on Macintosh. We +don't try to describe VMS usage in this manual. +@end iftex + +@node Distrib, Intro, Top, Top +@unnumbered Distribution + +GNU Emacs is @dfn{free software}; this means that everyone is free to +use it and free to redistribute it on certain conditions. GNU Emacs +is not in the public domain; it is copyrighted and there are +restrictions on its distribution, but these restrictions are designed +to permit everything that a good cooperating citizen would want to do. +What is not allowed is to try to prevent others from further sharing +any version of GNU Emacs that they might get from you. The precise +conditions are found in the GNU General Public License that comes with +Emacs and also appears in this manual@footnote{This manual is itself +covered by the GNU Free Documentation License. This license is +similar in spirit to the General Public License, but is more suitable +for documentation. @xref{GNU Free Documentation License}.}. +@xref{Copying}. + +One way to get a copy of GNU Emacs is from someone else who has it. +You need not ask for our permission to do so, or tell any one else; +just copy it. If you have access to the Internet, you can get the +latest distribution version of GNU Emacs by anonymous FTP; see +@url{http://www.gnu.org/software/emacs} on our website for more +information. + +You may also receive GNU Emacs when you buy a computer. Computer +manufacturers are free to distribute copies on the same terms that apply to +everyone else. These terms require them to give you the full sources, +including whatever changes they may have made, and to permit you to +redistribute the GNU Emacs received from them under the usual terms of the +General Public License. In other words, the program must be free for you +when you get it, not just free for the manufacturer. + +You can also order copies of GNU Emacs from the Free Software +Foundation. This is a convenient and reliable way to get a copy; it is +also a good way to help fund our work. We also sell hardcopy versions +of this manual and @cite{An Introduction to Programming in Emacs Lisp}, +by Robert J. Chassell. You can find an order form on our web site at +@url{http://www.gnu.org/order/order.html}. For further information, +write to + +@display +Free Software Foundation +51 Franklin Street, Fifth Floor +Boston, MA 02110-1301 +USA +@end display + +The income from distribution fees goes to support the foundation's +purpose: the development of new free software, and improvements to our +existing programs including GNU Emacs. + +If you find GNU Emacs useful, please @strong{send a donation} to the +Free Software Foundation to support our work. Donations to the Free +Software Foundation are tax deductible in the US. If you use GNU Emacs +at your workplace, please suggest that the company make a donation. If +company policy is unsympathetic to the idea of donating to charity, you +might instead suggest ordering a CD-ROM from the Foundation +occasionally, or subscribing to periodic updates. + +@iftex +@node Acknowledgments, Intro, Distrib, Top +@unnumberedsec Acknowledgments + +Contributors to GNU Emacs include Jari Aalto, Per Abrahamsen, Tomas +Abrahamsson, Jay K.@: Adams, Michael Albinus, Nagy Andras, Ralf +Angeli, Joe Arceneaux, Miles Bader, David Bakhash, Juanma Barranquero, +Eli Barzilay, Steven L.@: Baur, Jay Belanger, Alexander L.@: Belikoff, +Boaz Ben-Zvi, Karl Berry, Anna M.@: Bigatti, Ray Blaak, Jim Blandy, Johan Bockg@aa{}rd, +Per Bothner, Terrence Brannon, Frank Bresz, Peter Breton, Emmanuel +Briot, Kevin Broadey, Vincent Broman, David M.@: Brown, Georges +Brun-Cottan, Joe Buehler, W@l{}odek Bzyl, Bill Carpenter, Per +Cederqvist, Hans Chalupsky, Chris Chase, Bob Chassell, Andrew Choi, +Sacha Chua, James Clark, Mike Clarkson, Glynn Clements, Andrew +Csillag, Doug Cutting, Mathias Dahl, Satyaki Das, Michael DeCorte, +Gary Delp, Matthieu Devin, Eri Ding, Jan Dj@"{a}rv, Carsten Dominik, +Scott Draves, Benjamin Drieu, Viktor Dukhovni, John Eaton, Rolf Ebert, +Paul Eggert, Stephen Eglen, Torbj@"orn Einarsson, Tsugutomo Enami, +Hans Henrik Eriksen, Michael Ernst, Ata Etemadi, Frederick Farnbach, +Oscar Figueiredo, Fred Fish, Karl Fogel, Gary Foster, Romain +Francoise, Noah Friedman, Andreas Fuchs, Hallvard Furuseth, Keith +Gabryelski, Peter S.@: Galbraith, Kevin Gallagher, Kevin Gallo, Juan +Le@'{o}n Lahoz Garc@'{@dotless{i}}a, Howard Gayle, Stephen Gildea, Julien +Gilles, David Gillespie, Bob Glickstein, Deepak Goel, Boris Goldowsky, +Michelangelo Grigni, Odd Gripenstam, Kai Gro@ss{}johann, Michael +Gschwind, Henry Guillaume, Doug Gwyn, Ken'ichi Handa, Lars Hansen, +Chris Hanson, K. Shane Hartman, John Heidemann, Jon K.@: Hellan, +Jesper Harder, Markus Heritsch, Karl Heuer, Manabu Higashida, Anders +Holst, Jeffrey C.@: Honig, Kurt Hornik, Tom Houlder, Joakim Hove, +Denis Howe, Lars Ingebrigtsen, Andrew Innes, Seiichiro Inoue, Pavel +Janik, Paul Jarc, Ulf Jasper, Michael K. Johnson, Kyle Jones, Terry +Jones, Simon Josefsson, Arne J@o{}rgensen, Tomoji Kagatani, Brewster +Kahle, Lute Kamstra, David Kastrup, David Kaufman, Henry Kautz, Taichi +Kawabata, Howard Kaye, Michael Kifer, Richard King, Peter Kleiweg, +Shuhei Kobayashi, Pavel Kobiakov, Larry K.@: Kolodney, David M.@: +Koppelman, Koseki Yoshinori, Robert Krawitz, Sebastian Kremer, Ryszard +Kubiak, Geoff Kuenning, David K@aa{}gedal, Daniel LaLiberte, Mario +Lang, Aaron Larson, James R.@: Larus, Vinicius Jose Latorre, Werner +Lemberg, Frederic Lepied, Peter Liljenberg, Lars Lindberg, Chris +Lindblad, Anders Lindgren, Thomas Link, Juri Linkov, Francis Litterio, +Emilio C. Lopes, Dave Love, Sascha L@"{u}decke, Eric Ludlam,Alan +Mackenzie, Christopher J.@: Madsen, Neil M.@: Mager, Ken Manheimer, +Bill Mann, Brian Marick, Simon Marshall, Bengt Martensson, Charlie +Martin, Thomas May, Roland McGrath, Will Mengarini, David Megginson, +Ben A. Mesander, Wayne Mesard, Brad Miller, Lawrence Mitchell, Richard +Mlynarik, Gerd Moellmann, Stefan Monnier, Morioka Tomohiko, Keith +Moore, Glenn Morris, Diane Murray, Sen Nagata, Erik Naggum, Thomas +Neumann, Thien-Thi Nguyen, Mike Newton, Jurgen Nickelsen, Dan +Nicolaescu, Hrvoje Niksic, Jeff Norden, Andrew Norman, Alexandre +Oliva, Bob Olson, Michael Olson, Takaaki Ota, Pieter E.@: J.@: Pareit, +David Pearson, Jeff Peck, Damon Anton Permezel, Tom Perrine, William +M.@: Perry, Per Persson, Jens Petersen, Daniel Pfeiffer, Richard L.@: +Pieri, Fred Pierresteguy, Christian Plaunt, David Ponce, Francesco +A.@: Potorti, Michael D. Prange, Mukesh Prasad, Ken Raeburn, Marko +Rahamaa, Ashwin Ram, Eric S. Raymond, Paul Reilly, Edward M. Reingold, +Alex Rezinsky, Rob Riepel, David Reitter, Nick Roberts, Roland B.@: +Roberts, John Robinson, Danny Roozendaal, William Rosenblatt, +Guillermo J.@: Rozas, Martin Rudalics, Ivar Rummelhoff, Jason Rumney, +Wolfgang Rupprecht, Kevin Ryde, James B. Salem, Masahiko Sato, Jorgen +Schaefer, Holger Schauer, William Schelter, Ralph Schleicher, Gregor +Schmid, Michael Schmidt, Ronald S. Schnell, Philippe Schnoebelen, Jan +Schormann, Alex Schroeder, Stephen Schoef, Raymond Scholz, Randal +Schwartz, Oliver Seidel, Manuel Serrano, Hovav Shacham, Stanislav +Shalunov, Marc Shapiro, Richard Sharman, Olin Shivers, Espen Skoglund, +Rick Sladkey, Lynn Slater, Chris Smith, David Smith, Paul D.@: Smith, +Andre Spiegel, Michael Staats, William Sommerfeld, Michael Staats, +Reiner Steib, Sam Steingold, Ake Stenhoff, Peter Stephenson, Ken +Stevens, Jonathan Stigelman, Martin Stjernholm, Kim F.@: Storm, Steve +Strassman, Olaf Sylvester, Naoto Takahashi, Steven Tamm, Jean-Philippe +Theberge, Jens T.@: Berger Thielemann, Spencer Thomas, Jim Thompson, +Luc Teirlinck, Tom Tromey, Enami Tsugutomo, Eli Tziperman, Daiki Ueno, +Masanobu Umeda, Rajesh Vaidheeswarran, Neil W.@: Van Dyke, Didier +Verna, Ulrik Vieth, Geoffrey Voelker, Johan Vromans, Inge Wallin, John +Paul Wallington, Colin Walters, Barry Warsaw, Morten Welinder, Joseph +Brian Wells, Rodney Whitby, John Wiegley, Ed Wilkinson, Mike Williams, +Bill Wohler, Steven A. Wood, Dale R.@: Worley, Francis J.@: Wright, +Felix S. T. Wu, Tom Wurgler, Katsumi Yamaoka, Masatake Yamato, +Jonathan Yavner, Ryan Yeske, Chong Yidong, Ilya Zakharevich, Milan +Zamazal, Victor Zandy, Eli Zaretskii, Jamie Zawinski, Shenghuo Zhu, +Ian T.@: Zimmermann, Reto Zimmermann, Neal Ziring, Teodor Zlatanov, +and Detlev Zundel. +@end iftex + +@node Intro, Glossary, Distrib, Top +@unnumbered Introduction + + You are reading about GNU Emacs, the GNU incarnation of the +advanced, self-documenting, customizable, extensible editor Emacs. +(The `G' in `GNU' is not silent.) + + We call Emacs advanced because it provides much more than simple +insertion and deletion. It can control subprocesses, indent programs +automatically, show two or more files at once, and edit formatted +text. Emacs editing commands operate in terms of characters, words, +lines, sentences, paragraphs, and pages, as well as expressions and +comments in various programming languages. + + @dfn{Self-documenting} means that at any time you can type a special +character, @kbd{Control-h}, to find out what your options are. You can +also use it to find out what any command does, or to find all the commands +that pertain to a topic. @xref{Help}. + + @dfn{Customizable} means that you can alter Emacs commands' behavior +in simple ways. For example, if you use a programming language in +which comments start with @samp{<**} and end with @samp{**>}, you can +tell the Emacs comment manipulation commands to use those strings +(@pxref{Comments}). Another sort of customization is rearrangement of +the command set. For example, you can rebind the basic cursor motion +commands (up, down, left and right) to any keys on the keyboard that +you find comfortable. @xref{Customization}. + + @dfn{Extensible} means that you can go beyond simple customization +and write entirely new commands---programs in the Lisp language to be +run by Emacs's own Lisp interpreter. Emacs is an ``on-line +extensible'' system, which means that it is divided into many +functions that call each other, any of which can be redefined in the +middle of an editing session. Almost any part of Emacs can be +replaced without making a separate copy of all of Emacs. Most of the +editing commands of Emacs are written in Lisp; the few exceptions +could have been written in Lisp but use C instead for efficiency. +Writing an extension is programming, but non-programmers can use it +afterwards. @xref{Top, Emacs Lisp Intro, Preface, eintr, An +Introduction to Programming in Emacs Lisp}, if you want to learn Emacs +Lisp programming. + + When running on a graphical display, Emacs provides its own menus +and convenient handling of mouse buttons. In addition, Emacs provides +many of the benefits of a graphical display even on a text-only +terminal. For instance, it can highlight parts of a file, display and +edit several files at once, move text between files, and edit files +while running shell commands. + +@include screen.texi +@include commands.texi +@include entering.texi +@include basic.texi +@include mini.texi +@include m-x.texi +@include help.texi +@include mark.texi +@include killing.texi +@include regs.texi +@include display.texi +@include search.texi +@include fixit.texi +@include kmacro.texi +@include files.texi +@include buffers.texi +@include windows.texi +@include frames.texi +@include mule.texi +@include major.texi +@include indent.texi +@include text.texi +@include programs.texi +@include building.texi +@include maintaining.texi +@include abbrevs.texi +@ifnottex +@include picture-xtra.texi +@end ifnottex +@include sending.texi +@include rmail.texi +@include dired.texi +@include calendar.texi +@include misc.texi +@include custom.texi +@include trouble.texi + +@node Copying, GNU Free Documentation License, Service, Top +@appendix GNU GENERAL PUBLIC LICENSE +@include gpl.texi + +@node GNU Free Documentation License, Emacs Invocation, Copying, Top +@appendix GNU Free Documentation License +@include doclicense.texi + +@include cmdargs.texi +@include xresources.texi + +@include anti.texi +@include macos.texi +@include msdog.texi +@include gnu.texi +@include glossary.texi +@ifnottex +@include ack.texi +@end ifnottex + +@c The Option Index is produced only in the on-line version, +@c because the index entries related to command-line options +@c tend to point to the same pages and all begin with a dash. +@c This, and the need to keep the node links consistent, are +@c the reasons for the funky @iftex/@ifnottex dance below. +@c The Option Index is _not_ before Key Index, because that +@c would require changes in the glossary.texi's @node line. +@c It is not after Concept Index for similar reasons. + +@iftex +@node Key Index, Command Index, Glossary, Top +@unnumbered Key (Character) Index +@printindex ky +@end iftex + +@ifnottex +@node Key Index, Option Index, Glossary, Top +@unnumbered Key (Character) Index +@printindex ky + +@node Option Index, Command Index, Key Index, Top +@unnumbered Command-Line Options Index +@printindex op + +@node Command Index, Variable Index, Option Index, Top +@unnumbered Command and Function Index +@printindex fn +@end ifnottex + +@iftex +@node Command Index, Variable Index, Key Index, Top +@unnumbered Command and Function Index +@printindex fn +@end iftex + +@node Variable Index, Concept Index, Command Index, Top +@unnumbered Variable Index +@printindex vr + +@node Concept Index, Acknowledgments, Variable Index, Top +@unnumbered Concept Index +@printindex cp + +@bye + +@ignore + arch-tag: ed48740a-410b-46ea-9387-c9a9252a3392 +@end ignore diff --git a/doc/emacs/emerge-xtra.texi b/doc/emacs/emerge-xtra.texi new file mode 100644 index 00000000000..e78f17e59d6 --- /dev/null +++ b/doc/emacs/emerge-xtra.texi @@ -0,0 +1,414 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@c +@c This file is included either in emacs-xtra.texi (when producing the +@c printed version) or in the main Emacs manual (for the on-line version). +@node Emerge +@section Merging Files with Emerge +@cindex Emerge +@cindex merging files + + It's not unusual for programmers to get their signals crossed and +modify the same program in two different directions. To recover from +this confusion, you need to merge the two versions. Emerge makes this +easier. For other ways to compare files, see +@iftex +@ref{Comparing Files,,, emacs, the Emacs Manual}, +@end iftex +@ifnottex +@ref{Comparing Files}, +@end ifnottex +and @ref{Top, Ediff,, ediff, The Ediff Manual}. + +@menu +* Overview of Emerge:: How to start Emerge. Basic concepts. +* Submodes of Emerge:: Fast mode vs. Edit mode. + Skip Prefers mode and Auto Advance mode. +* State of Difference:: You do the merge by specifying state A or B + for each difference. +* Merge Commands:: Commands for selecting a difference, + changing states of differences, etc. +* Exiting Emerge:: What to do when you've finished the merge. +* Combining in Emerge:: How to keep both alternatives for a difference. +* Fine Points of Emerge:: Misc. +@end menu + +@node Overview of Emerge +@subsection Overview of Emerge + + To start Emerge, run one of these four commands: + +@table @kbd +@item M-x emerge-files +@findex emerge-files +Merge two specified files. + +@item M-x emerge-files-with-ancestor +@findex emerge-files-with-ancestor +Merge two specified files, with reference to a common ancestor. + +@item M-x emerge-buffers +@findex emerge-buffers +Merge two buffers. + +@item M-x emerge-buffers-with-ancestor +@findex emerge-buffers-with-ancestor +Merge two buffers with reference to a common ancestor in a third +buffer. +@end table + +@cindex merge buffer (Emerge) +@cindex A and B buffers (Emerge) + The Emerge commands compare two files or buffers, and display the +comparison in three buffers: one for each input text (the @dfn{A buffer} +and the @dfn{B buffer}), and one (the @dfn{merge buffer}) where merging +takes place. The merge buffer shows the full merged text, not just the +differences. Wherever the two input texts differ, you can choose which +one of them to include in the merge buffer. + + The Emerge commands that take input from existing buffers use only +the accessible portions of those buffers, if they are narrowed. +@iftex +@xref{Narrowing,,, emacs, the Emacs Manual}. +@end iftex +@ifnottex +@xref{Narrowing}. +@end ifnottex + + + If a common ancestor version is available, from which the two texts to +be merged were both derived, Emerge can use it to guess which +alternative is right. Wherever one current version agrees with the +ancestor, Emerge presumes that the other current version is a deliberate +change which should be kept in the merged version. Use the +@samp{with-ancestor} commands if you want to specify a common ancestor +text. These commands read three file or buffer names---variant A, +variant B, and the common ancestor. + + After the comparison is done and the buffers are prepared, the +interactive merging starts. You control the merging by typing special +@dfn{merge commands} in the merge buffer (@pxref{Merge Commands}). +For each run of differences between the input texts, you can choose +which one of them to keep, or edit them both together. + + The merge buffer uses a special major mode, Emerge mode, with commands +for making these choices. But you can also edit the buffer with +ordinary Emacs commands. + + At any given time, the attention of Emerge is focused on one +particular difference, called the @dfn{selected} difference. This +difference is marked off in the three buffers like this: + +@example +vvvvvvvvvvvvvvvvvvvv +@var{text that differs} +^^^^^^^^^^^^^^^^^^^^ +@end example + +@noindent +Emerge numbers all the differences sequentially and the mode +line always shows the number of the selected difference. + + Normally, the merge buffer starts out with the A version of the text. +But when the A version of a difference agrees with the common ancestor, +then the B version is initially preferred for that difference. + + Emerge leaves the merged text in the merge buffer when you exit. At +that point, you can save it in a file with @kbd{C-x C-w}. If you give a +numeric argument to @code{emerge-files} or +@code{emerge-files-with-ancestor}, it reads the name of the output file +using the minibuffer. (This is the last file name those commands read.) +Then exiting from Emerge saves the merged text in the output file. + + Normally, Emerge commands save the output buffer in its file when you +exit. If you abort Emerge with @kbd{C-]}, the Emerge command does not +save the output buffer, but you can save it yourself if you wish. + +@node Submodes of Emerge +@subsection Submodes of Emerge + + You can choose between two modes for giving merge commands: Fast mode +and Edit mode. In Fast mode, basic merge commands are single +characters, but ordinary Emacs commands are disabled. This is +convenient if you use only merge commands. In Edit mode, all merge +commands start with the prefix key @kbd{C-c C-c}, and the normal Emacs +commands are also available. This allows editing the merge buffer, but +slows down Emerge operations. + + Use @kbd{e} to switch to Edit mode, and @kbd{C-c C-c f} to switch to +Fast mode. The mode line indicates Edit and Fast modes with @samp{E} +and @samp{F}. + + Emerge has two additional submodes that affect how particular merge +commands work: Auto Advance mode and Skip Prefers mode. + + If Auto Advance mode is in effect, the @kbd{a} and @kbd{b} commands +advance to the next difference. This lets you go through the merge +faster as long as you simply choose one of the alternatives from the +input. The mode line indicates Auto Advance mode with @samp{A}. + + If Skip Prefers mode is in effect, the @kbd{n} and @kbd{p} commands +skip over differences in states prefer-A and prefer-B (@pxref{State of +Difference}). Thus you see only differences for which neither version +is presumed ``correct.'' The mode line indicates Skip Prefers mode with +@samp{S}. + +@findex emerge-auto-advance-mode +@findex emerge-skip-prefers-mode + Use the command @kbd{s a} (@code{emerge-auto-advance-mode}) to set or +clear Auto Advance mode. Use @kbd{s s} +(@code{emerge-skip-prefers-mode}) to set or clear Skip Prefers mode. +These commands turn on the mode with a positive argument, turns it off +with a negative or zero argument, and toggle the mode with no argument. + +@node State of Difference +@subsection State of a Difference + + In the merge buffer, a difference is marked with lines of @samp{v} and +@samp{^} characters. Each difference has one of these seven states: + +@table @asis +@item A +The difference is showing the A version. The @kbd{a} command always +produces this state; the mode line indicates it with @samp{A}. + +@item B +The difference is showing the B version. The @kbd{b} command always +produces this state; the mode line indicates it with @samp{B}. + +@item default-A +@itemx default-B +The difference is showing the A or the B state by default, because you +haven't made a choice. All differences start in the default-A state +(and thus the merge buffer is a copy of the A buffer), except those for +which one alternative is ``preferred'' (see below). + +When you select a difference, its state changes from default-A or +default-B to plain A or B. Thus, the selected difference never has +state default-A or default-B, and these states are never displayed in +the mode line. + +The command @kbd{d a} chooses default-A as the default state, and @kbd{d +b} chooses default-B. This chosen default applies to all differences +which you haven't ever selected and for which no alternative is preferred. +If you are moving through the merge sequentially, the differences you +haven't selected are those following the selected one. Thus, while +moving sequentially, you can effectively make the A version the default +for some sections of the merge buffer and the B version the default for +others by using @kbd{d a} and @kbd{d b} between sections. + +@item prefer-A +@itemx prefer-B +The difference is showing the A or B state because it is +@dfn{preferred}. This means that you haven't made an explicit choice, +but one alternative seems likely to be right because the other +alternative agrees with the common ancestor. Thus, where the A buffer +agrees with the common ancestor, the B version is preferred, because +chances are it is the one that was actually changed. + +These two states are displayed in the mode line as @samp{A*} and @samp{B*}. + +@item combined +The difference is showing a combination of the A and B states, as a +result of the @kbd{x c} or @kbd{x C} commands. + +Once a difference is in this state, the @kbd{a} and @kbd{b} commands +don't do anything to it unless you give them a numeric argument. + +The mode line displays this state as @samp{comb}. +@end table + +@node Merge Commands +@subsection Merge Commands + + Here are the Merge commands for Fast mode; in Edit mode, precede them +with @kbd{C-c C-c}: + +@table @kbd +@item p +Select the previous difference. + +@item n +Select the next difference. + +@item a +Choose the A version of this difference. + +@item b +Choose the B version of this difference. + +@item C-u @var{n} j +Select difference number @var{n}. + +@item . +Select the difference containing point. You can use this command in the +merge buffer or in the A or B buffer. + +@item q +Quit---finish the merge. + +@item C-] +Abort---exit merging and do not save the output. + +@item f +Go into Fast mode. (In Edit mode, this is actually @kbd{C-c C-c f}.) + +@item e +Go into Edit mode. + +@item l +Recenter (like @kbd{C-l}) all three windows. + +@item - +Specify part of a prefix numeric argument. + +@item @var{digit} +Also specify part of a prefix numeric argument. + +@item d a +Choose the A version as the default from here down in +the merge buffer. + +@item d b +Choose the B version as the default from here down in +the merge buffer. + +@item c a +Copy the A version of this difference into the kill ring. + +@item c b +Copy the B version of this difference into the kill ring. + +@item i a +Insert the A version of this difference at point. + +@item i b +Insert the B version of this difference at point. + +@item m +Put point and mark around the difference. + +@item ^ +Scroll all three windows down (like @kbd{M-v}). + +@item v +Scroll all three windows up (like @kbd{C-v}). + +@item < +Scroll all three windows left (like @kbd{C-x <}). + +@item > +Scroll all three windows right (like @kbd{C-x >}). + +@item | +Reset horizontal scroll on all three windows. + +@item x 1 +Shrink the merge window to one line. (Use @kbd{C-u l} to restore it +to full size.) + +@item x c +Combine the two versions of this difference (@pxref{Combining in +Emerge}). + +@item x f +Show the names of the files/buffers Emerge is operating on, in a Help +window. (Use @kbd{C-u l} to restore windows.) + +@item x j +Join this difference with the following one. +(@kbd{C-u x j} joins this difference with the previous one.) + +@item x s +Split this difference into two differences. Before you use this +command, position point in each of the three buffers at the place where +you want to split the difference. + +@item x t +Trim identical lines off the top and bottom of the difference. +Such lines occur when the A and B versions are +identical but differ from the ancestor version. +@end table + +@node Exiting Emerge +@subsection Exiting Emerge + + The @kbd{q} command (@code{emerge-quit}) finishes the merge, storing +the results into the output file if you specified one. It restores the +A and B buffers to their proper contents, or kills them if they were +created by Emerge and you haven't changed them. It also disables the +Emerge commands in the merge buffer, since executing them later could +damage the contents of the various buffers. + + @kbd{C-]} aborts the merge. This means exiting without writing the +output file. If you didn't specify an output file, then there is no +real difference between aborting and finishing the merge. + + If the Emerge command was called from another Lisp program, then its +return value is @code{t} for successful completion, or @code{nil} if you +abort. + +@node Combining in Emerge +@subsection Combining the Two Versions + + Sometimes you want to keep @emph{both} alternatives for a particular +difference. To do this, use @kbd{x c}, which edits the merge buffer +like this: + +@example +@group +#ifdef NEW +@var{version from A buffer} +#else /* not NEW */ +@var{version from B buffer} +#endif /* not NEW */ +@end group +@end example + +@noindent +@vindex emerge-combine-versions-template +While this example shows C preprocessor conditionals delimiting the two +alternative versions, you can specify the strings to use by setting +the variable @code{emerge-combine-versions-template} to a string of your +choice. In the string, @samp{%a} says where to put version A, and +@samp{%b} says where to put version B. The default setting, which +produces the results shown above, looks like this: + +@example +@group +"#ifdef NEW\n%a#else /* not NEW */\n%b#endif /* not NEW */\n" +@end group +@end example + +@node Fine Points of Emerge +@subsection Fine Points of Emerge + + During the merge, you mustn't try to edit the A and B buffers yourself. +Emerge modifies them temporarily, but ultimately puts them back the way +they were. + + You can have any number of merges going at once---just don't use any one +buffer as input to more than one merge at once, since the temporary +changes made in these buffers would get in each other's way. + + Starting Emerge can take a long time because it needs to compare the +files fully. Emacs can't do anything else until @code{diff} finishes. +Perhaps in the future someone will change Emerge to do the comparison in +the background when the input files are large---then you could keep on +doing other things with Emacs until Emerge is ready to accept +commands. + +@vindex emerge-startup-hook + After setting up the merge, Emerge runs the hook +@code{emerge-startup-hook}. +@iftex +@xref{Hooks,,, emacs, the Emacs Manual}. +@end iftex +@ifnottex +@xref{Hooks}. +@end ifnottex + +@ignore + arch-tag: cda63f09-9c5f-4ea1-adb9-4a820fdfb24e +@end ignore diff --git a/doc/emacs/entering.texi b/doc/emacs/entering.texi new file mode 100644 index 00000000000..e338a6a8619 --- /dev/null +++ b/doc/emacs/entering.texi @@ -0,0 +1,170 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 2001, 2002, 2003, +@c 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Entering Emacs, Exiting, Text Characters, Top +@chapter Entering and Exiting Emacs +@cindex entering Emacs +@cindex starting Emacs + + The usual way to invoke Emacs is with the shell command +@command{emacs}. Emacs clears the screen, then displays an initial +help message and copyright notice. Some operating systems discard +your type-ahead when Emacs starts up; they give Emacs no way to +prevent this. On those systems, wait for Emacs to clear the screen +before you start typing. + + From a shell window under the X Window System, run Emacs in the +background with @command{emacs&}. This way, Emacs won't tie up the +shell window, so you can use it to run other shell commands while +Emacs is running. You can type Emacs commands as soon as you direct +your keyboard input to an Emacs frame. + +@vindex initial-major-mode + When Emacs starts up, it creates a buffer named @samp{*scratch*}. +That's the buffer you start out in. The @samp{*scratch*} buffer uses +Lisp Interaction mode; you can use it to type Lisp expressions and +evaluate them. You can also ignore that capability and just write notes +there. You can specify a different major mode for this buffer by +setting the variable @code{initial-major-mode} in your init file. +@xref{Init File}. + + It is possible to specify files to be visited, Lisp files to be +loaded, and functions to be called through Emacs command-line +arguments. @xref{Emacs Invocation}. The feature exists mainly for +compatibility with other editors, and for scripts. + + Many editors are designed to edit one file. When done with that +file, you exit the editor. The next time you want to edit a file, you +must start the editor again. Working this way, it is convenient to +use a command-line argument to say which file to edit. + + However, killing Emacs after editing one each and starting it afresh +for the next file is both unnecessary and harmful, since it denies you +the full power of Emacs. Emacs can visit more than one file in a +single editing session, and that is the right way to use it. Exiting +the Emacs session loses valuable accumulated context, such as the kill +ring, registers, undo history, and mark ring. These features are +useful for operating on multiple files, or even continuing to edit one +file. If you kill Emacs after each file, you don't take advantage of +them. + + The recommended way to use GNU Emacs is to start it only once, just +after you log in, and do all your editing in the same Emacs session. +Each time you edit a file, you visit it with the existing Emacs, which +eventually has many files in it ready for editing. Usually you do not +kill Emacs until you are about to log out. @xref{Files}, for more +information on visiting more than one file. + + To edit a file from another program while Emacs is running, you can +use the @command{emacsclient} helper program to open a file in the +already running Emacs. @xref{Emacs Server}. + +@ifnottex +@raisesections +@end ifnottex + +@node Exiting, Basic, Entering Emacs, Top +@section Exiting Emacs +@cindex exiting +@cindex killing Emacs +@cindex suspending +@cindex leaving Emacs +@cindex quitting Emacs + + There are two commands for exiting Emacs, and three kinds of +exiting: @dfn{iconifying} Emacs, @dfn{suspending} Emacs, and +@dfn{killing} Emacs. + + @dfn{Iconifying} means replacing the Emacs frame with a small box or +``icon'' on the screen. This is the usual way to exit Emacs when +you're using a graphical display---if you bother to ``exit'' at all. +(Just switching to another application is usually sufficient.) + + @dfn{Suspending} means stopping Emacs temporarily and returning +control to its parent process (usually a shell), allowing you to +resume editing later in the same Emacs job. This is the usual way to +exit Emacs when running it on a text terminal. + + @dfn{Killing} Emacs means destroying the Emacs job. You can run Emacs +again later, but you will get a fresh Emacs; there is no way to resume +the same editing session after it has been killed. + +@table @kbd +@item C-z +Suspend Emacs (@code{suspend-emacs}) or iconify a frame +(@code{iconify-or-deiconify-frame}). +@item C-x C-c +Kill Emacs (@code{save-buffers-kill-emacs}). +@end table + +@kindex C-z +@findex iconify-or-deiconify-frame + On graphical displays, @kbd{C-z} runs the command +@code{iconify-or-deiconify-frame}, which temporarily iconifies (or +``minimizes'') the selected Emacs frame (@pxref{Frames}). You can +then use the window manager to select some other application. (You +could select another application without iconifying Emacs first, but +getting the Emacs frame out of the way can make it more convenient to +find the other application.) + +@findex suspend-emacs + On a text terminal, @kbd{C-z} runs the command @code{suspend-emacs}. +Suspending Emacs takes you back to the shell from which you invoked +Emacs. You can resume Emacs with the shell command @command{%emacs} +in most common shells. On systems that don't support suspending +programs, @kbd{C-z} starts an inferior shell that communicates +directly with the terminal, and Emacs waits until you exit the +subshell. (The way to do that is probably with @kbd{C-d} or +@command{exit}, but it depends on which shell you use.) On these +systems, you can only get back to the shell from which Emacs was run +(to log out, for example) when you kill Emacs. + +@vindex cannot-suspend + Suspending can fail if you run Emacs under a shell that doesn't +support suspendion of its subjobs, even if the system itself does +support it. In such a case, you can set the variable +@code{cannot-suspend} to a non-@code{nil} value to force @kbd{C-z} to +start an inferior shell. + +@kindex C-x C-c +@findex save-buffers-kill-emacs + To exit and kill Emacs, type @kbd{C-x C-c} +(@code{save-buffers-kill-emacs}). A two-character key is used to make +it harder to type by accident. This command first offers to save any +modified file-visiting buffers. If you do not save them all, it asks +for confirmation with @kbd{yes} before killing Emacs, since any +changes not saved now will be lost forever. Also, if any subprocesses are +still running, @kbd{C-x C-c} asks for confirmation about them, since +killing Emacs will also kill the subprocesses. + +@vindex confirm-kill-emacs + If the value of the variable @code{confirm-kill-emacs} is +non-@code{nil}, @kbd{C-x C-c} assumes that its value is a predicate +function, and calls that function. If the result is non-@code{nil}, the +session is killed, otherwise Emacs continues to run. One convenient +function to use as the value of @code{confirm-kill-emacs} is the +function @code{yes-or-no-p}. The default value of +@code{confirm-kill-emacs} is @code{nil}. + + You can't resume an Emacs session after killing it. Emacs can, +however, record certain session information when you kill it, such as +which files you visited, so the next time you start Emacs it will try +to visit the same files. @xref{Saving Emacs Sessions}. + + The operating system usually listens for certain special characters +whose meaning is to kill or suspend the program you are running. +@b{This operating system feature is turned off while you are in Emacs.} +The meanings of @kbd{C-z} and @kbd{C-x C-c} as keys in Emacs were +inspired by the use of @kbd{C-z} and @kbd{C-c} on several operating +systems as the characters for stopping or killing a program, but that is +their only relationship with the operating system. You can customize +these keys to run any commands of your choice (@pxref{Keymaps}). + +@ifnottex +@lowersections +@end ifnottex + +@ignore + arch-tag: df798d8b-f253-4113-b585-f528f078a944 +@end ignore diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi new file mode 100644 index 00000000000..7ba36916684 --- /dev/null +++ b/doc/emacs/files.texi @@ -0,0 +1,2950 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1999, 2000, +@c 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Files, Buffers, Keyboard Macros, Top +@chapter File Handling +@cindex files + + The operating system stores data permanently in named @dfn{files}, so +most of the text you edit with Emacs comes from a file and is ultimately +stored in a file. + + To edit a file, you must tell Emacs to read the file and prepare a +buffer containing a copy of the file's text. This is called +@dfn{visiting} the file. Editing commands apply directly to text in the +buffer; that is, to the copy inside Emacs. Your changes appear in the +file itself only when you @dfn{save} the buffer back into the file. + + In addition to visiting and saving files, Emacs can delete, copy, +rename, and append to files, keep multiple versions of them, and operate +on file directories. + +@menu +* File Names:: How to type and edit file-name arguments. +* Visiting:: Visiting a file prepares Emacs to edit the file. +* Saving:: Saving makes your changes permanent. +* Reverting:: Reverting cancels all the changes not saved. +@ifnottex +* Autorevert:: Auto Reverting non-file buffers. +@end ifnottex +* Auto Save:: Auto Save periodically protects against loss of data. +* File Aliases:: Handling multiple names for one file. +* Version Control:: Version control systems (RCS, CVS and SCCS). +* Directories:: Creating, deleting, and listing file directories. +* Comparing Files:: Finding where two files differ. +* Diff Mode:: Mode for editing file differences. +* Misc File Ops:: Other things you can do on files. +* Compressed Files:: Accessing compressed files. +* File Archives:: Operating on tar, zip, jar etc. archive files. +* Remote Files:: Accessing files on other sites. +* Quoted File Names:: Quoting special characters in file names. +* File Name Cache:: Completion against a list of files you often use. +* File Conveniences:: Convenience Features for Finding Files. +* Filesets:: Handling sets of files. +@end menu + +@node File Names +@section File Names +@cindex file names + + Most Emacs commands that operate on a file require you to specify the +file name. (Saving and reverting are exceptions; the buffer knows which +file name to use for them.) You enter the file name using the +minibuffer (@pxref{Minibuffer}). @dfn{Completion} is available +(@pxref{Completion}) to make it easier to specify long file names. When +completing file names, Emacs ignores those whose file-name extensions +appear in the variable @code{completion-ignored-extensions}; see +@ref{Completion Options}. + + For most operations, there is a @dfn{default file name} which is used +if you type just @key{RET} to enter an empty argument. Normally the +default file name is the name of the file visited in the current buffer; +this makes it easy to operate on that file with any of the Emacs file +commands. + +@vindex default-directory + Each buffer has a default directory which is normally the same as the +directory of the file visited in that buffer. When you enter a file +name without a directory, the default directory is used. If you specify +a directory in a relative fashion, with a name that does not start with +a slash, it is interpreted with respect to the default directory. The +default directory is kept in the variable @code{default-directory}, +which has a separate value in every buffer. + +@findex cd +@findex pwd + The command @kbd{M-x pwd} displays the current buffer's default +directory, and the command @kbd{M-x cd} sets it (to a value read using +the minibuffer). A buffer's default directory changes only when the +@code{cd} command is used. A file-visiting buffer's default directory +is initialized to the directory of the file it visits. If you create +a buffer with @kbd{C-x b}, its default directory is copied from that +of the buffer that was current at the time. + + For example, if the default file name is @file{/u/rms/gnu/gnu.tasks} +then the default directory is normally @file{/u/rms/gnu/}. If you +type just @samp{foo}, which does not specify a directory, it is short +for @file{/u/rms/gnu/foo}. @samp{../.login} would stand for +@file{/u/rms/.login}. @samp{new/foo} would stand for the file name +@file{/u/rms/gnu/new/foo}. + +@vindex insert-default-directory + The default directory actually appears in the minibuffer when the +minibuffer becomes active to read a file name. This serves two +purposes: it @emph{shows} you what the default is, so that you can type +a relative file name and know with certainty what it will mean, and it +allows you to @emph{edit} the default to specify a different directory. +This insertion of the default directory is inhibited if the variable +@code{insert-default-directory} is set to @code{nil}. + + Note that it is legitimate to type an absolute file name after you +enter the minibuffer, ignoring the presence of the default directory +name as part of the text. The final minibuffer contents may look +invalid, but that is not so. For example, if the minibuffer starts out +with @samp{/usr/tmp/} and you add @samp{/x1/rms/foo}, you get +@samp{/usr/tmp//x1/rms/foo}; but Emacs ignores everything through the +first slash in the double slash; the result is @samp{/x1/rms/foo}. +@xref{Minibuffer File}. + +@cindex home directory shorthand + You can use @file{~/} in a file name to mean your home directory, +or @file{~@var{user-id}/} to mean the home directory of a user whose +login name is @code{user-id}@footnote{ +On MS-Windows and MS-DOS systems, where a user doesn't have a home +directory, Emacs replaces @file{~/} with the value of the +environment variable @code{HOME}; see @ref{General Variables}. On +these systems, the @file{~@var{user-id}/} construct is supported only +for the current user, i.e., only if @var{user-id} is the current +user's login name.}. + +@cindex environment variables in file names +@cindex expansion of environment variables +@cindex @code{$} in file names + @anchor{File Names with $}@samp{$} in a file name is used to +substitute an environment variable. The environment variable name +consists of all the alphanumeric characters after the @samp{$}; +alternatively, it can be enclosed in braces after the @samp{$}. For +example, if you have used the shell command @command{export +FOO=rms/hacks} to set up an environment variable named @env{FOO}, then +you can use @file{/u/$FOO/test.c} or @file{/u/$@{FOO@}/test.c} as an +abbreviation for @file{/u/rms/hacks/test.c}. If the environment +variable is not defined, no substitution occurs: @file{/u/$notdefined} +stands for itself (assuming the environment variable @env{notdefined} +is not defined). + + Note that shell commands to set environment variables affect Emacs +only when done before Emacs is started. + + To access a file with @samp{$} in its name, if the @samp{$} causes +expansion, type @samp{$$}. This pair is converted to a single +@samp{$} at the same time as variable substitution is performed for a +single @samp{$}. Alternatively, quote the whole file name with +@samp{/:} (@pxref{Quoted File Names}). File names which begin with a +literal @samp{~} should also be quoted with @samp{/:}. + +@findex substitute-in-file-name + The Lisp function that performs the @samp{$}-substitution is called +@code{substitute-in-file-name}. The substitution is performed only on +file names read as such using the minibuffer. + + You can include non-@acronym{ASCII} characters in file names if you set the +variable @code{file-name-coding-system} to a non-@code{nil} value. +@xref{File Name Coding}. + +@node Visiting +@section Visiting Files +@cindex visiting files +@cindex open file + +@table @kbd +@item C-x C-f +Visit a file (@code{find-file}). +@item C-x C-r +Visit a file for viewing, without allowing changes to it +(@code{find-file-read-only}). +@item C-x C-v +Visit a different file instead of the one visited last +(@code{find-alternate-file}). +@item C-x 4 f +Visit a file, in another window (@code{find-file-other-window}). Don't +alter what is displayed in the selected window. +@item C-x 5 f +Visit a file, in a new frame (@code{find-file-other-frame}). Don't +alter what is displayed in the selected frame. +@item M-x find-file-literally +Visit a file with no conversion of the contents. +@end table + +@cindex files, visiting and saving +@cindex saving files + @dfn{Visiting} a file means reading its contents into an Emacs +buffer so you can edit them. Emacs makes a new buffer for each file +that you visit. We often say that this buffer ``is visiting'' that +file, or that the buffer's ``visited file'' is that file. Emacs +constructs the buffer name from the file name by throwing away the +directory, keeping just the name proper. For example, a file named +@file{/usr/rms/emacs.tex} would get a buffer named @samp{emacs.tex}. +If there is already a buffer with that name, Emacs constructs a unique +name---the normal method is to append @samp{<2>}, @samp{<3>}, and so +on, but you can select other methods (@pxref{Uniquify}). + + Each window's mode line shows the name of the buffer that is being displayed +in that window, so you can always tell what buffer you are editing. + + The changes you make with editing commands are made in the Emacs +buffer. They do not take effect in the file that you visited, or any +permanent place, until you @dfn{save} the buffer. Saving the buffer +means that Emacs writes the current contents of the buffer into its +visited file. @xref{Saving}. + +@cindex modified (buffer) + If a buffer contains changes that have not been saved, we say the +buffer is @dfn{modified}. This is important because it implies that +some changes will be lost if the buffer is not saved. The mode line +displays two stars near the left margin to indicate that the buffer is +modified. + +@kindex C-x C-f +@findex find-file + To visit a file, use the command @kbd{C-x C-f} (@code{find-file}). Follow +the command with the name of the file you wish to visit, terminated by a +@key{RET}. + + The file name is read using the minibuffer (@pxref{Minibuffer}), with +defaulting and completion in the standard manner (@pxref{File Names}). +While in the minibuffer, you can abort @kbd{C-x C-f} by typing +@kbd{C-g}. File-name completion ignores certain file names; for more +about this, see @ref{Completion Options}. + + Your confirmation that @kbd{C-x C-f} has completed successfully is +the appearance of new text on the screen and a new buffer name in the +mode line. If the specified file does not exist and you could not +create it, or exists but you can't read it, then you get an error, +with an error message displayed in the echo area. + + If you visit a file that is already in Emacs, @kbd{C-x C-f} does not make +another copy. It selects the existing buffer containing that file. +However, before doing so, it checks whether the file itself has changed +since you visited or saved it last. If the file has changed, Emacs offers +to reread it. + +@vindex large-file-warning-threshold +@cindex maximum buffer size exceeded, error message + If you try to visit a file larger than +@code{large-file-warning-threshold} (the default is 10000000, which is +about 10 megabytes), Emacs will ask you for confirmation first. You +can answer @kbd{y} to proceed with visiting the file. Note, however, +that Emacs cannot visit files that are larger than the maximum Emacs +buffer size, which is around 256 megabytes on 32-bit machines +(@pxref{Buffers}). If you try, Emacs will display an error message +saying that the maximum buffer size has been exceeded. + +@cindex file selection dialog + On graphical displays there are two additional methods for +visiting files. Firstly, when Emacs is built with a suitable GUI +toolkit, commands invoked with the mouse (by clicking on the menu bar +or tool bar) use the toolkit's standard File Selection dialog instead +of prompting for the file name in the minibuffer. On Unix and +GNU/Linux platforms, Emacs does that when built with GTK, LessTif, and +Motif toolkits; on MS-Windows and Mac, the GUI version does that by default. +For information on how to customize this, see @ref{Dialog Boxes}. + + Secondly, Emacs supports ``drag and drop''; dropping a file into an +ordinary Emacs window visits the file using that window. However, +dropping a file into a window displaying a Dired buffer moves or +copies the file into the displayed directory. For details, see +@ref{Drag and Drop}, and @ref{Misc Dired Features}. + +@cindex creating files + What if you want to create a new file? Just visit it. Emacs displays +@samp{(New file)} in the echo area, but in other respects behaves as if +you had visited an existing empty file. If you make any changes and +save them, the file is created. + + Emacs recognizes from the contents of a file which end-of-line +convention it uses to separate lines---newline (used on GNU/Linux and +on Unix), carriage-return linefeed (used on Microsoft systems), or +just carriage-return (used on the Macintosh)---and automatically +converts the contents to the normal Emacs convention, which is that +the newline character separates lines. This is a part of the general +feature of coding system conversion (@pxref{Coding Systems}), and +makes it possible to edit files imported from different operating +systems with equal convenience. If you change the text and save the +file, Emacs performs the inverse conversion, changing newlines back +into carriage-return linefeed or just carriage-return if appropriate. + +@vindex find-file-run-dired + If the file you specify is actually a directory, @kbd{C-x C-f} invokes +Dired, the Emacs directory browser, so that you can ``edit'' the contents +of the directory (@pxref{Dired}). Dired is a convenient way to view, delete, +or operate on the files in the directory. However, if the variable +@code{find-file-run-dired} is @code{nil}, then it is an error to try +to visit a directory. + + Files which are actually collections of other files, or @dfn{file +archives}, are visited in special modes which invoke a Dired-like +environment to allow operations on archive members. @xref{File +Archives}, for more about these features. + +@cindex wildcard characters in file names +@vindex find-file-wildcards + If the file name you specify contains shell-style wildcard +characters, Emacs visits all the files that match it. (On +case-insensitive filesystems, Emacs matches the wildcards disregarding +the letter case.) Wildcards include @samp{?}, @samp{*}, and +@samp{[@dots{}]} sequences. To enter the wild card @samp{?} in a file +name in the minibuffer, you need to type @kbd{C-q ?}. @xref{Quoted +File Names}, for information on how to visit a file whose name +actually contains wildcard characters. You can disable the wildcard +feature by customizing @code{find-file-wildcards}. + + If you visit a file that the operating system won't let you modify, +or that is marked read-only, Emacs makes the buffer read-only too, so +that you won't go ahead and make changes that you'll have trouble +saving afterward. You can make the buffer writable with @kbd{C-x C-q} +(@code{toggle-read-only}). @xref{Misc Buffer}. + +@kindex C-x C-r +@findex find-file-read-only + If you want to visit a file as read-only in order to protect +yourself from entering changes accidentally, visit it with the command +@kbd{C-x C-r} (@code{find-file-read-only}) instead of @kbd{C-x C-f}. + +@kindex C-x C-v +@findex find-alternate-file + If you visit a nonexistent file unintentionally (because you typed the +wrong file name), use the @kbd{C-x C-v} command +(@code{find-alternate-file}) to visit the file you really wanted. +@kbd{C-x C-v} is similar to @kbd{C-x C-f}, but it kills the current +buffer (after first offering to save it if it is modified). When +@kbd{C-x C-v} reads the file name to visit, it inserts the entire +default file name in the buffer, with point just after the directory +part; this is convenient if you made a slight error in typing the name. + +@kindex C-x 4 f +@findex find-file-other-window + @kbd{C-x 4 f} (@code{find-file-other-window}) is like @kbd{C-x C-f} +except that the buffer containing the specified file is selected in another +window. The window that was selected before @kbd{C-x 4 f} continues to +show the same buffer it was already showing. If this command is used when +only one window is being displayed, that window is split in two, with one +window showing the same buffer as before, and the other one showing the +newly requested file. @xref{Windows}. + +@kindex C-x 5 f +@findex find-file-other-frame + @kbd{C-x 5 f} (@code{find-file-other-frame}) is similar, but opens a +new frame, or makes visible any existing frame showing the file you +seek. This feature is available only when you are using a window +system. @xref{Frames}. + +@findex find-file-literally + If you wish to edit a file as a sequence of @acronym{ASCII} characters with no special +encoding or conversion, use the @kbd{M-x find-file-literally} command. +It visits a file, like @kbd{C-x C-f}, but does not do format conversion +(@pxref{Formatted Text}), character code conversion (@pxref{Coding +Systems}), or automatic uncompression (@pxref{Compressed Files}), and +does not add a final newline because of @code{require-final-newline}. +If you already have visited the same file in the usual (non-literal) +manner, this command asks you whether to visit it literally instead. + +@vindex find-file-hook +@vindex find-file-not-found-functions + Two special hook variables allow extensions to modify the operation of +visiting files. Visiting a file that does not exist runs the functions +in the list @code{find-file-not-found-functions}; this variable holds a list +of functions, and the functions are called one by one (with no +arguments) until one of them returns non-@code{nil}. This is not a +normal hook, and the name ends in @samp{-functions} rather than @samp{-hook} +to indicate that fact. + + Successful visiting of any file, whether existing or not, calls the +functions in the list @code{find-file-hook}, with no arguments. +This variable is a normal hook. In the case of a nonexistent file, the +@code{find-file-not-found-functions} are run first. @xref{Hooks}. + + There are several ways to specify automatically the major mode for +editing the file (@pxref{Choosing Modes}), and to specify local +variables defined for that file (@pxref{File Variables}). + +@node Saving +@section Saving Files + + @dfn{Saving} a buffer in Emacs means writing its contents back into the file +that was visited in the buffer. + +@menu +* Save Commands:: Commands for saving files. +* Backup:: How Emacs saves the old version of your file. +* Customize Save:: Customizing the saving of files. +* Interlocking:: How Emacs protects against simultaneous editing + of one file by two users. +* Shadowing: File Shadowing. Copying files to "shadows" automatically. +* Time Stamps:: Emacs can update time stamps on saved files. +@end menu + +@node Save Commands +@subsection Commands for Saving Files + + These are the commands that relate to saving and writing files. + +@table @kbd +@item C-x C-s +Save the current buffer in its visited file on disk (@code{save-buffer}). +@item C-x s +Save any or all buffers in their visited files (@code{save-some-buffers}). +@item M-~ +Forget that the current buffer has been changed (@code{not-modified}). +With prefix argument (@kbd{C-u}), mark the current buffer as changed. +@item C-x C-w +Save the current buffer with a specified file name (@code{write-file}). +@item M-x set-visited-file-name +Change the file name under which the current buffer will be saved. +@end table + +@kindex C-x C-s +@findex save-buffer + When you wish to save the file and make your changes permanent, type +@kbd{C-x C-s} (@code{save-buffer}). After saving is finished, @kbd{C-x C-s} +displays a message like this: + +@example +Wrote /u/rms/gnu/gnu.tasks +@end example + +@noindent +If the selected buffer is not modified (no changes have been made in it +since the buffer was created or last saved), saving is not really done, +because it would have no effect. Instead, @kbd{C-x C-s} displays a message +like this in the echo area: + +@example +(No changes need to be saved) +@end example + +@kindex C-x s +@findex save-some-buffers + The command @kbd{C-x s} (@code{save-some-buffers}) offers to save any +or all modified buffers. It asks you what to do with each buffer. The +possible responses are analogous to those of @code{query-replace}: + +@table @kbd +@item y +Save this buffer and ask about the rest of the buffers. +@item n +Don't save this buffer, but ask about the rest of the buffers. +@item ! +Save this buffer and all the rest with no more questions. +@c following generates acceptable underfull hbox +@item @key{RET} +Terminate @code{save-some-buffers} without any more saving. +@item . +Save this buffer, then exit @code{save-some-buffers} without even asking +about other buffers. +@item C-r +View the buffer that you are currently being asked about. When you exit +View mode, you get back to @code{save-some-buffers}, which asks the +question again. +@item d +Diff the buffer against its corresponding file, so you can see +what changes you would be saving. +@item C-h +Display a help message about these options. +@end table + + @kbd{C-x C-c}, the key sequence to exit Emacs, invokes +@code{save-some-buffers} and therefore asks the same questions. + +@kindex M-~ +@findex not-modified + If you have changed a buffer but you do not want to save the changes, +you should take some action to prevent it. Otherwise, each time you use +@kbd{C-x s} or @kbd{C-x C-c}, you are liable to save this buffer by +mistake. One thing you can do is type @kbd{M-~} (@code{not-modified}), +which clears out the indication that the buffer is modified. If you do +this, none of the save commands will believe that the buffer needs to be +saved. (@samp{~} is often used as a mathematical symbol for `not'; thus +@kbd{M-~} is `not', metafied.) You could also use +@code{set-visited-file-name} (see below) to mark the buffer as visiting +a different file name, one which is not in use for anything important. +Alternatively, you can cancel all the changes made since the file was +visited or saved, by reading the text from the file again. This is +called @dfn{reverting}. @xref{Reverting}. (You could also undo all the +changes by repeating the undo command @kbd{C-x u} until you have undone +all the changes; but reverting is easier.) You can also kill the buffer. + +@findex set-visited-file-name + @kbd{M-x set-visited-file-name} alters the name of the file that the +current buffer is visiting. It reads the new file name using the +minibuffer. Then it marks the buffer as visiting that file name, and +changes the buffer name correspondingly. @code{set-visited-file-name} +does not save the buffer in the newly visited file; it just alters the +records inside Emacs in case you do save later. It also marks the +buffer as ``modified'' so that @kbd{C-x C-s} in that buffer +@emph{will} save. + +@kindex C-x C-w +@findex write-file + If you wish to mark the buffer as visiting a different file and save it +right away, use @kbd{C-x C-w} (@code{write-file}). It is +equivalent to @code{set-visited-file-name} followed by @kbd{C-x C-s} +(except that @kbd{C-x C-w} asks for confirmation if the file exists). +@kbd{C-x C-s} used on a buffer that is not visiting a file has the +same effect as @kbd{C-x C-w}; that is, it reads a file name, marks the +buffer as visiting that file, and saves it there. The default file name in +a buffer that is not visiting a file is made by combining the buffer name +with the buffer's default directory (@pxref{File Names}). + + If the new file name implies a major mode, then @kbd{C-x C-w} switches +to that major mode, in most cases. The command +@code{set-visited-file-name} also does this. @xref{Choosing Modes}. + + If Emacs is about to save a file and sees that the date of the latest +version on disk does not match what Emacs last read or wrote, Emacs +notifies you of this fact, because it probably indicates a problem caused +by simultaneous editing and requires your immediate attention. +@xref{Interlocking,, Simultaneous Editing}. + +@node Backup +@subsection Backup Files +@cindex backup file +@vindex make-backup-files +@vindex vc-make-backup-files + + On most operating systems, rewriting a file automatically destroys all +record of what the file used to contain. Thus, saving a file from Emacs +throws away the old contents of the file---or it would, except that +Emacs carefully copies the old contents to another file, called the +@dfn{backup} file, before actually saving. + + For most files, the variable @code{make-backup-files} determines +whether to make backup files. On most operating systems, its default +value is @code{t}, so that Emacs does write backup files. + + For files managed by a version control system (@pxref{Version +Control}), the variable @code{vc-make-backup-files} determines whether +to make backup files. By default it is @code{nil}, since backup files +are redundant when you store all the previous versions in a version +control system. +@iftex +@xref{General VC Options,,,emacs-xtra, Specialized Emacs Features}. +@end iftex +@ifnottex +@xref{General VC Options}. +@end ifnottex + + + At your option, Emacs can keep either a single backup for each file, +or make a series of numbered backup files for each file that you edit. + +@vindex backup-enable-predicate +@vindex temporary-file-directory +@vindex small-temporary-file-directory + The default value of the @code{backup-enable-predicate} variable +prevents backup files being written for files in the directories used +for temporary files, specified by @code{temporary-file-directory} or +@code{small-temporary-file-directory}. + + Emacs makes a backup for a file only the first time the file is saved +from one buffer. No matter how many times you save a file, its backup file +continues to contain the contents from before the file was visited. +Normally this means that the backup file contains the contents from before +the current editing session; however, if you kill the buffer and then visit +the file again, a new backup file will be made by the next save. + + You can also explicitly request making another backup file from a +buffer even though it has already been saved at least once. If you save +the buffer with @kbd{C-u C-x C-s}, the version thus saved will be made +into a backup file if you save the buffer again. @kbd{C-u C-u C-x C-s} +saves the buffer, but first makes the previous file contents into a new +backup file. @kbd{C-u C-u C-u C-x C-s} does both things: it makes a +backup from the previous contents, and arranges to make another from the +newly saved contents if you save again. + +@menu +* One or Many: Numbered Backups. Whether to make one backup file or many. +* Names: Backup Names. How backup files are named. +* Deletion: Backup Deletion. Emacs deletes excess numbered backups. +* Copying: Backup Copying. Backups can be made by copying or renaming. +@end menu + +@node Numbered Backups +@subsubsection Numbered Backups + +@vindex version-control + The choice of single backup file or multiple numbered backup files +is controlled by the variable @code{version-control}. Its possible +values are: + +@table @code +@item t +Make numbered backups. +@item nil +Make numbered backups for files that have numbered backups already. +Otherwise, make single backups. +@item never +Never make numbered backups; always make single backups. +@end table + +@noindent +The usual way to set this variable is globally, through your +@file{.emacs} file or the customization buffer. However, you can set +@code{version-control} locally in an individual buffer to control the +making of backups for that buffer's file. For example, Rmail mode +locally sets @code{version-control} to @code{never} to make sure that +there is only one backup for an Rmail file. @xref{Locals}. + +@cindex @env{VERSION_CONTROL} environment variable + If you set the environment variable @env{VERSION_CONTROL}, to tell +various GNU utilities what to do with backup files, Emacs also obeys the +environment variable by setting the Lisp variable @code{version-control} +accordingly at startup. If the environment variable's value is @samp{t} +or @samp{numbered}, then @code{version-control} becomes @code{t}; if the +value is @samp{nil} or @samp{existing}, then @code{version-control} +becomes @code{nil}; if it is @samp{never} or @samp{simple}, then +@code{version-control} becomes @code{never}. + +@node Backup Names +@subsubsection Single or Numbered Backups + + When Emacs makes a single backup file, its name is normally +constructed by appending @samp{~} to the file name being edited; thus, +the backup file for @file{eval.c} would be @file{eval.c~}. + +@vindex make-backup-file-name-function +@vindex backup-directory-alist + You can change this behavior by defining the variable +@code{make-backup-file-name-function} to a suitable function. +Alternatively you can customize the variable +@code{backup-directory-alist} to specify that files matching certain +patterns should be backed up in specific directories. + + A typical use is to add an element @code{("." . @var{dir})} to make +all backups in the directory with absolute name @var{dir}; Emacs +modifies the backup file names to avoid clashes between files with the +same names originating in different directories. Alternatively, +adding, say, @code{("." . ".~")} would make backups in the invisible +subdirectory @file{.~} of the original file's directory. Emacs +creates the directory, if necessary, to make the backup. + + If access control stops Emacs from writing backup files under the usual +names, it writes the backup file as @file{%backup%~} in your home +directory. Only one such file can exist, so only the most recently +made such backup is available. + + If you choose to have a series of numbered backup files, backup file +names contain @samp{.~}, the number, and another @samp{~} after the +original file name. Thus, the backup files of @file{eval.c} would be +called @file{eval.c.~1~}, @file{eval.c.~2~}, and so on, all the way +through names like @file{eval.c.~259~} and beyond. The variable +@code{backup-directory-alist} applies to numbered backups just as +usual. + +@node Backup Deletion +@subsubsection Automatic Deletion of Backups + + To prevent excessive consumption of disk space, Emacs can delete numbered +backup versions automatically. Generally Emacs keeps the first few backups +and the latest few backups, deleting any in between. This happens every +time a new backup is made. + +@vindex kept-old-versions +@vindex kept-new-versions + The two variables @code{kept-old-versions} and +@code{kept-new-versions} control this deletion. Their values are, +respectively, the number of oldest (lowest-numbered) backups to keep +and the number of newest (highest-numbered) ones to keep, each time a +new backup is made. The backups in the middle (excluding those oldest +and newest) are the excess middle versions---those backups are +deleted. These variables' values are used when it is time to delete +excess versions, just after a new backup version is made; the newly +made backup is included in the count in @code{kept-new-versions}. By +default, both variables are 2. + +@vindex delete-old-versions + If @code{delete-old-versions} is @code{t}, Emacs deletes the excess +backup files silently. If it is @code{nil}, the default, Emacs asks +you whether it should delete the excess backup versions. If it has +any other value, then Emacs never automatically deletes backups. + + Dired's @kbd{.} (Period) command can also be used to delete old versions. +@xref{Dired Deletion}. + +@node Backup Copying +@subsubsection Copying vs.@: Renaming + + Backup files can be made by copying the old file or by renaming it. +This makes a difference when the old file has multiple names (hard +links). If the old file is renamed into the backup file, then the +alternate names become names for the backup file. If the old file is +copied instead, then the alternate names remain names for the file +that you are editing, and the contents accessed by those names will be +the new contents. + + The method of making a backup file may also affect the file's owner +and group. If copying is used, these do not change. If renaming is used, +you become the file's owner, and the file's group becomes the default +(different operating systems have different defaults for the group). + + Having the owner change is usually a good idea, because then the owner +always shows who last edited the file. Also, the owners of the backups +show who produced those versions. Occasionally there is a file whose +owner should not change; it is a good idea for such files to contain +local variable lists to set @code{backup-by-copying-when-mismatch} +locally (@pxref{File Variables}). + +@vindex backup-by-copying +@vindex backup-by-copying-when-linked +@vindex backup-by-copying-when-mismatch +@vindex backup-by-copying-when-privileged-mismatch +@cindex file ownership, and backup +@cindex backup, and user-id + The choice of renaming or copying is controlled by four variables. +Renaming is the default choice. If the variable +@code{backup-by-copying} is non-@code{nil}, copying is used. Otherwise, +if the variable @code{backup-by-copying-when-linked} is non-@code{nil}, +then copying is used for files that have multiple names, but renaming +may still be used when the file being edited has only one name. If the +variable @code{backup-by-copying-when-mismatch} is non-@code{nil}, then +copying is used if renaming would cause the file's owner or group to +change. @code{backup-by-copying-when-mismatch} is @code{t} by default +if you start Emacs as the superuser. The fourth variable, +@code{backup-by-copying-when-privileged-mismatch}, gives the highest +numeric user-id for which @code{backup-by-copying-when-mismatch} will be +forced on. This is useful when low-numbered user-ids are assigned to +special system users, such as @code{root}, @code{bin}, @code{daemon}, +etc., which must maintain ownership of files. + + When a file is managed with a version control system (@pxref{Version +Control}), Emacs does not normally make backups in the usual way for +that file. But check-in and check-out are similar in some ways to +making backups. One unfortunate similarity is that these operations +typically break hard links, disconnecting the file name you visited from +any alternate names for the same file. This has nothing to do with +Emacs---the version control system does it. + +@node Customize Save +@subsection Customizing Saving of Files + +@vindex require-final-newline + If the value of the variable @code{require-final-newline} is +@code{t}, saving or writing a file silently puts a newline at the end +if there isn't already one there. If the value is @code{visit}, Emacs +adds a newline at the end of any file that doesn't have one, just +after it visits the file. (This marks the buffer as modified, and you +can undo it.) If the value is @code{visit-save}, that means to add +newlines both on visiting and on saving. If the value is @code{nil}, +Emacs leaves the end of the file unchanged; if it's neither @code{nil} +nor @code{t}, Emacs asks you whether to add a newline. The default is +@code{nil}. + +@vindex mode-require-final-newline + Many major modes are designed for specific kinds of files that are +always supposed to end in newlines. These major modes set the +variable @code{require-final-newline} according to +@code{mode-require-final-newline}. By setting the latter variable, +you can control how these modes handle final newlines. + +@vindex write-region-inhibit-fsync + When Emacs saves a file, it invokes the @code{fsync} system call to +force the data immediately out to disk. This is important for safety +if the system crashes or in case of power outage. However, it can be +disruptive on laptops using power saving, because it requires the disk +to spin up each time you save a file. Setting +@code{write-region-inhibit-fsync} to a non-@code{nil} value disables +this synchronization. Be careful---this means increased risk of data +loss. + +@node Interlocking +@subsection Protection against Simultaneous Editing + +@cindex file dates +@cindex simultaneous editing + Simultaneous editing occurs when two users visit the same file, both +make changes, and then both save them. If nobody were informed that +this was happening, whichever user saved first would later find that his +changes were lost. + + On some systems, Emacs notices immediately when the second user starts +to change the file, and issues an immediate warning. On all systems, +Emacs checks when you save the file, and warns if you are about to +overwrite another user's changes. You can prevent loss of the other +user's work by taking the proper corrective action instead of saving the +file. + +@findex ask-user-about-lock +@cindex locking files + When you make the first modification in an Emacs buffer that is +visiting a file, Emacs records that the file is @dfn{locked} by you. +(It does this by creating a symbolic link in the same directory with a +different name.) Emacs removes the lock when you save the changes. The +idea is that the file is locked whenever an Emacs buffer visiting it has +unsaved changes. + +@cindex collision + If you begin to modify the buffer while the visited file is locked by +someone else, this constitutes a @dfn{collision}. When Emacs detects a +collision, it asks you what to do, by calling the Lisp function +@code{ask-user-about-lock}. You can redefine this function for the sake +of customization. The standard definition of this function asks you a +question and accepts three possible answers: + +@table @kbd +@item s +Steal the lock. Whoever was already changing the file loses the lock, +and you gain the lock. +@item p +Proceed. Go ahead and edit the file despite its being locked by someone else. +@item q +Quit. This causes an error (@code{file-locked}), and the buffer +contents remain unchanged---the modification you were trying to make +does not actually take place. +@end table + + Note that locking works on the basis of a file name; if a file has +multiple names, Emacs does not realize that the two names are the same file +and cannot prevent two users from editing it simultaneously under different +names. However, basing locking on names means that Emacs can interlock the +editing of new files that will not really exist until they are saved. + + Some systems are not configured to allow Emacs to make locks, and +there are cases where lock files cannot be written. In these cases, +Emacs cannot detect trouble in advance, but it still can detect the +collision when you try to save a file and overwrite someone else's +changes. + + If Emacs or the operating system crashes, this may leave behind lock +files which are stale, so you may occasionally get warnings about +spurious collisions. When you determine that the collision is spurious, +just use @kbd{p} to tell Emacs to go ahead anyway. + + Every time Emacs saves a buffer, it first checks the last-modification +date of the existing file on disk to verify that it has not changed since the +file was last visited or saved. If the date does not match, it implies +that changes were made in the file in some other way, and these changes are +about to be lost if Emacs actually does save. To prevent this, Emacs +displays a warning message and asks for confirmation before saving. +Occasionally you will know why the file was changed and know that it does +not matter; then you can answer @kbd{yes} and proceed. Otherwise, you should +cancel the save with @kbd{C-g} and investigate the situation. + + The first thing you should do when notified that simultaneous editing +has already taken place is to list the directory with @kbd{C-u C-x C-d} +(@pxref{Directories}). This shows the file's current author. You +should attempt to contact him to warn him not to continue editing. +Often the next step is to save the contents of your Emacs buffer under a +different name, and use @code{diff} to compare the two files.@refill + +@node File Shadowing +@subsection Shadowing Files +@cindex shadow files +@cindex file shadows +@findex shadow-initialize + +@table @kbd +@item M-x shadow-initialize +Set up file shadowing. +@item M-x shadow-define-literal-group +Declare a single file to be shared between sites. +@item M-x shadow-define-regexp-group +Make all files that match each of a group of files be shared between hosts. +@item M-x shadow-define-cluster @key{RET} @var{name} @key{RET} +Define a shadow file cluster @var{name}. +@item M-x shadow-copy-files +Copy all pending shadow files. +@item M-x shadow-cancel +Cancel the instruction to shadow some files. +@end table + +You can arrange to keep identical @dfn{shadow} copies of certain files +in more than one place---possibly on different machines. To do this, +first you must set up a @dfn{shadow file group}, which is a set of +identically-named files shared between a list of sites. The file +group is permanent and applies to further Emacs sessions as well as +the current one. Once the group is set up, every time you exit Emacs, +it will copy the file you edited to the other files in its group. You +can also do the copying without exiting Emacs, by typing @kbd{M-x +shadow-copy-files}. + +To set up a shadow file group, use @kbd{M-x +shadow-define-literal-group} or @kbd{M-x shadow-define-regexp-group}. +See their documentation strings for further information. + +Before copying a file to its shadows, Emacs asks for confirmation. +You can answer ``no'' to bypass copying of this file, this time. If +you want to cancel the shadowing permanently for a certain file, use +@kbd{M-x shadow-cancel} to eliminate or change the shadow file group. + +A @dfn{shadow cluster} is a group of hosts that share directories, so +that copying to or from one of them is sufficient to update the file +on all of them. Each shadow cluster has a name, and specifies the +network address of a primary host (the one we copy files to), and a +regular expression that matches the host names of all the other hosts +in the cluster. You can define a shadow cluster with @kbd{M-x +shadow-define-cluster}. + +@node Time Stamps +@subsection Updating Time Stamps Automatically +@cindex time stamps +@cindex modification dates +@cindex locale, date format + +You can arrange to put a time stamp in a file, so that it will be updated +automatically each time you edit and save the file. The time stamp +has to be in the first eight lines of the file, and you should +insert it like this: + +@example +Time-stamp: <> +@end example + +@noindent +or like this: + +@example +Time-stamp: " " +@end example + +@findex time-stamp + Then add the hook function @code{time-stamp} to the hook +@code{before-save-hook}; that hook function will automatically update +the time stamp, inserting the current date and time when you save the +file. You can also use the command @kbd{M-x time-stamp} to update the +time stamp manually. For other customizations, see the Custom group +@code{time-stamp}. Note that non-numeric fields in the time stamp are +formatted according to your locale setting (@pxref{Environment}). + +@node Reverting +@section Reverting a Buffer +@findex revert-buffer +@cindex drastic changes +@cindex reread a file + + If you have made extensive changes to a file and then change your mind +about them, you can get rid of them by reading in the previous version +of the file. To do this, use @kbd{M-x revert-buffer}, which operates on +the current buffer. Since reverting a buffer unintentionally could lose +a lot of work, you must confirm this command with @kbd{yes}. + + @code{revert-buffer} tries to position point in such a way that, if +the file was edited only slightly, you will be at approximately the +same piece of text after reverting as before. However, if you have made +drastic changes, point may wind up in a totally different piece of text. + + Reverting marks the buffer as ``not modified'' until another change is +made. + + Some kinds of buffers whose contents reflect data bases other than files, +such as Dired buffers, can also be reverted. For them, reverting means +recalculating their contents from the appropriate data base. Buffers +created explicitly with @kbd{C-x b} cannot be reverted; @code{revert-buffer} +reports an error when asked to do so. + +@vindex revert-without-query + When you edit a file that changes automatically and frequently---for +example, a log of output from a process that continues to run---it may be +useful for Emacs to revert the file without querying you, whenever you +visit the file again with @kbd{C-x C-f}. + + To request this behavior, set the variable @code{revert-without-query} +to a list of regular expressions. When a file name matches one of these +regular expressions, @code{find-file} and @code{revert-buffer} will +revert it automatically if it has changed---provided the buffer itself +is not modified. (If you have edited the text, it would be wrong to +discard your changes.) + +@cindex Global Auto-Revert mode +@cindex mode, Global Auto-Revert +@cindex Auto-Revert mode +@cindex mode, Auto-Revert +@findex global-auto-revert-mode +@findex auto-revert-mode +@findex auto-revert-tail-mode + + You may find it useful to have Emacs revert files automatically when +they change. Three minor modes are available to do this. + + @kbd{M-x global-auto-revert-mode} enables Global Auto-Revert mode, +which periodically checks all file buffers and reverts when the +corresponding file has changed. @kbd{M-x auto-revert-mode} enables a +local version, Auto-Revert mode, which applies only to the current +buffer. + + You can use Auto-Revert mode to ``tail'' a file such as a system +log, so that changes made to that file by other programs are +continuously displayed. To do this, just move the point to the end of +the buffer, and it will stay there as the file contents change. +However, if you are sure that the file will only change by growing at +the end, use Auto-Revert Tail mode instead +(@code{auto-revert-tail-mode}). It is more efficient for this. + +@vindex auto-revert-interval + The variable @code{auto-revert-interval} controls how often to check +for a changed file. Since checking a remote file is too slow, these +modes do not check or revert remote files. + + @xref{VC Mode Line}, for Auto Revert peculiarities in buffers that +visit files under version control. + +@ifnottex +@include arevert-xtra.texi +@end ifnottex + +@node Auto Save +@section Auto-Saving: Protection Against Disasters +@cindex Auto Save mode +@cindex mode, Auto Save +@cindex crashes + + Emacs saves all the visited files from time to time (based on counting +your keystrokes) without being asked. This is called @dfn{auto-saving}. +It prevents you from losing more than a limited amount of work if the +system crashes. + + When Emacs determines that it is time for auto-saving, it considers +each buffer, and each is auto-saved if auto-saving is enabled for it +and it has been changed since the last time it was auto-saved. The +message @samp{Auto-saving...} is displayed in the echo area during +auto-saving, if any files are actually auto-saved. Errors occurring +during auto-saving are caught so that they do not interfere with the +execution of commands you have been typing. + +@menu +* Files: Auto Save Files. The file where auto-saved changes are + actually made until you save the file. +* Control: Auto Save Control. Controlling when and how often to auto-save. +* Recover:: Recovering text from auto-save files. +@end menu + +@node Auto Save Files +@subsection Auto-Save Files + + Auto-saving does not normally save in the files that you visited, because +it can be very undesirable to save a program that is in an inconsistent +state when you have made half of a planned change. Instead, auto-saving +is done in a different file called the @dfn{auto-save file}, and the +visited file is changed only when you request saving explicitly (such as +with @kbd{C-x C-s}). + + Normally, the auto-save file name is made by appending @samp{#} to the +front and rear of the visited file name. Thus, a buffer visiting file +@file{foo.c} is auto-saved in a file @file{#foo.c#}. Most buffers that +are not visiting files are auto-saved only if you request it explicitly; +when they are auto-saved, the auto-save file name is made by appending +@samp{#} to the front and rear of buffer name, then +adding digits and letters at the end for uniqueness. For +example, the @samp{*mail*} buffer in which you compose messages to be +sent might be auto-saved in a file named @file{#*mail*#704juu}. Auto-save file +names are made this way unless you reprogram parts of Emacs to do +something different (the functions @code{make-auto-save-file-name} and +@code{auto-save-file-name-p}). The file name to be used for auto-saving +in a buffer is calculated when auto-saving is turned on in that buffer. + +@cindex auto-save for remote files +@vindex auto-save-file-name-transforms + The variable @code{auto-save-file-name-transforms} allows a degree +of control over the auto-save file name. It lets you specify a series +of regular expressions and replacements to transform the auto save +file name. The default value puts the auto-save files for remote +files (@pxref{Remote Files}) into the temporary file directory on the +local machine. + + When you delete a substantial part of the text in a large buffer, auto +save turns off temporarily in that buffer. This is because if you +deleted the text unintentionally, you might find the auto-save file more +useful if it contains the deleted text. To reenable auto-saving after +this happens, save the buffer with @kbd{C-x C-s}, or use @kbd{C-u 1 M-x +auto-save-mode}. + +@vindex auto-save-visited-file-name + If you want auto-saving to be done in the visited file rather than +in a separate auto-save file, set the variable +@code{auto-save-visited-file-name} to a non-@code{nil} value. In this +mode, there is no real difference between auto-saving and explicit +saving. + +@vindex delete-auto-save-files + A buffer's auto-save file is deleted when you save the buffer in its +visited file. (You can inhibit this by setting the variable +@code{delete-auto-save-files} to @code{nil}.) Changing the visited +file name with @kbd{C-x C-w} or @code{set-visited-file-name} renames +any auto-save file to go with the new visited name. + +@node Auto Save Control +@subsection Controlling Auto-Saving + +@vindex auto-save-default +@findex auto-save-mode + Each time you visit a file, auto-saving is turned on for that file's +buffer if the variable @code{auto-save-default} is non-@code{nil} (but not +in batch mode; @pxref{Entering Emacs}). The default for this variable is +@code{t}, so auto-saving is the usual practice for file-visiting buffers. +Auto-saving can be turned on or off for any existing buffer with the +command @kbd{M-x auto-save-mode}. Like other minor mode commands, @kbd{M-x +auto-save-mode} turns auto-saving on with a positive argument, off with a +zero or negative argument; with no argument, it toggles. + +@vindex auto-save-interval + Emacs does auto-saving periodically based on counting how many characters +you have typed since the last time auto-saving was done. The variable +@code{auto-save-interval} specifies how many characters there are between +auto-saves. By default, it is 300. Emacs doesn't accept values that are +too small: if you customize @code{auto-save-interval} to a value less +than 20, Emacs will behave as if the value is 20. + +@vindex auto-save-timeout + Auto-saving also takes place when you stop typing for a while. The +variable @code{auto-save-timeout} says how many seconds Emacs should +wait before it does an auto save (and perhaps also a garbage +collection). (The actual time period is longer if the current buffer is +long; this is a heuristic which aims to keep out of your way when you +are editing long buffers, in which auto-save takes an appreciable amount +of time.) Auto-saving during idle periods accomplishes two things: +first, it makes sure all your work is saved if you go away from the +terminal for a while; second, it may avoid some auto-saving while you +are actually typing. + + Emacs also does auto-saving whenever it gets a fatal error. This +includes killing the Emacs job with a shell command such as @samp{kill +%emacs}, or disconnecting a phone line or network connection. + +@findex do-auto-save + You can request an auto-save explicitly with the command @kbd{M-x +do-auto-save}. + +@node Recover +@subsection Recovering Data from Auto-Saves + +@findex recover-file + You can use the contents of an auto-save file to recover from a loss +of data with the command @kbd{M-x recover-file @key{RET} @var{file} +@key{RET}}. This visits @var{file} and then (after your confirmation) +restores the contents from its auto-save file @file{#@var{file}#}. +You can then save with @kbd{C-x C-s} to put the recovered text into +@var{file} itself. For example, to recover file @file{foo.c} from its +auto-save file @file{#foo.c#}, do:@refill + +@example +M-x recover-file @key{RET} foo.c @key{RET} +yes @key{RET} +C-x C-s +@end example + + Before asking for confirmation, @kbd{M-x recover-file} displays a +directory listing describing the specified file and the auto-save file, +so you can compare their sizes and dates. If the auto-save file +is older, @kbd{M-x recover-file} does not offer to read it. + +@findex recover-session + If Emacs or the computer crashes, you can recover all the files you +were editing from their auto save files with the command @kbd{M-x +recover-session}. This first shows you a list of recorded interrupted +sessions. Move point to the one you choose, and type @kbd{C-c C-c}. + + Then @code{recover-session} asks about each of the files that were +being edited during that session, asking whether to recover that file. +If you answer @kbd{y}, it calls @code{recover-file}, which works in its +normal fashion. It shows the dates of the original file and its +auto-save file, and asks once again whether to recover that file. + + When @code{recover-session} is done, the files you've chosen to +recover are present in Emacs buffers. You should then save them. Only +this---saving them---updates the files themselves. + +@vindex auto-save-list-file-prefix + Emacs records information about interrupted sessions for later +recovery in files named +@file{~/.emacs.d/auto-save-list/.saves-@var{pid}-@var{hostname}}. All +of this name except the @file{@var{pid}-@var{hostname}} part comes +from the value of @code{auto-save-list-file-prefix}. You can record +sessions in a different place by customizing that variable. If you +set @code{auto-save-list-file-prefix} to @code{nil} in your +@file{.emacs} file, sessions are not recorded for recovery. + +@node File Aliases +@section File Name Aliases +@cindex symbolic links (visiting) +@cindex hard links (visiting) + + Symbolic links and hard links both make it possible for several file +names to refer to the same file. Hard links are alternate names that +refer directly to the file; all the names are equally valid, and no one +of them is preferred. By contrast, a symbolic link is a kind of defined +alias: when @file{foo} is a symbolic link to @file{bar}, you can use +either name to refer to the file, but @file{bar} is the real name, while +@file{foo} is just an alias. More complex cases occur when symbolic +links point to directories. + +@vindex find-file-existing-other-name +@vindex find-file-suppress-same-file-warnings + + Normally, if you visit a file which Emacs is already visiting under +a different name, Emacs displays a message in the echo area and uses +the existing buffer visiting that file. This can happen on systems +that support hard or symbolic links, or if you use a long file name on +a system that truncates long file names, or on a case-insensitive file +system. You can suppress the message by setting the variable +@code{find-file-suppress-same-file-warnings} to a non-@code{nil} +value. You can disable this feature entirely by setting the variable +@code{find-file-existing-other-name} to @code{nil}: then if you visit +the same file under two different names, you get a separate buffer for +each file name. + +@vindex find-file-visit-truename +@cindex truenames of files +@cindex file truenames + If the variable @code{find-file-visit-truename} is non-@code{nil}, +then the file name recorded for a buffer is the file's @dfn{truename} +(made by replacing all symbolic links with their target names), rather +than the name you specify. Setting @code{find-file-visit-truename} also +implies the effect of @code{find-file-existing-other-name}. + +@node Version Control +@section Version Control +@cindex version control + + @dfn{Version control systems} are packages that can record multiple +versions of a source file, usually storing the unchanged parts of the +file just once. Version control systems also record history information +such as the creation time of each version, who created it, and a +description of what was changed in that version. + + The Emacs version control interface is called VC. Its commands work +with different version control systems---currently, it supports CVS, +GNU Arch, RCS, Meta-CVS, Subversion, and SCCS. Of these, the GNU +project distributes CVS, GNU Arch, and RCS; we recommend that you use +either CVS or GNU Arch for your projects, and RCS for individual +files. We also have free software to replace SCCS, known as CSSC; if +you are using SCCS and don't want to make the incompatible change to +RCS or CVS, you can switch to CSSC. + + VC is enabled by default in Emacs. To disable it, set the +customizable variable @code{vc-handled-backends} to @code{nil} +@iftex +(@pxref{Customizing VC,,,emacs-xtra, Specialized Emacs Features}). +@end iftex +@ifnottex +(@pxref{Customizing VC}). +@end ifnottex + + +@menu +* Introduction to VC:: How version control works in general. +* VC Mode Line:: How the mode line shows version control status. +* Basic VC Editing:: How to edit a file under version control. +* Old Versions:: Examining and comparing old versions. +* Secondary VC Commands:: The commands used a little less frequently. +* Branches:: Multiple lines of development. +@ifnottex +* Remote Repositories:: Efficient access to remote CVS servers. +* Snapshots:: Sets of file versions treated as a unit. +* Miscellaneous VC:: Various other commands and features of VC. +* Customizing VC:: Variables that change VC's behavior. +@end ifnottex +@end menu + +@node Introduction to VC +@subsection Introduction to Version Control + + VC allows you to use a version control system from within Emacs, +integrating the version control operations smoothly with editing. VC +provides a uniform interface to version control, so that regardless of +which version control system is in use, you can use it the same way. + + This section provides a general overview of version control, and +describes the version control systems that VC supports. You can skip +this section if you are already familiar with the version control system +you want to use. + +@menu +* Why Version Control?:: Understanding the problems it addresses +* Version Systems:: Supported version control back-end systems. +* VC Concepts:: Words and concepts related to version control. +* Types of Log File:: The per-file VC log in contrast to the ChangeLog. +@end menu + +@node Why Version Control? +@subsubsection Understanding the problems it addresses + + Version control systems provide you with three important capabilities: +reversibility, concurrency, and history. + + The most basic capability you get from a version-control system is +reversibility, the ability to back up to a saved, known-good state when +you discover that some modification you did was a mistake or a bad idea. + + Version-control systems also support concurrency, the ability to +have many people modifying the same collection of code or documents +knowing that conflicting modifications can be detected and resolved. + + Version-control systems give you the capability to attach a history +to your data, explanatory comments about the intention behind each +change to it. Even for a programmer working solo change histories +are an important aid to memory; for a multi-person project they +become a vitally important form of communication among developers. + +@node Version Systems +@subsubsection Supported Version Control Systems + +@cindex back end (version control) + VC currently works with six different version control systems or +``back ends'': CVS, GNU Arch, RCS, Meta-CVS, Subversion, and SCCS. + +@cindex CVS + CVS is a free version control system that is used for the majority +of free software projects today. It allows concurrent multi-user +development either locally or over the network. Some of its +shortcomings, corrected by newer systems such as GNU Arch, are that it +lacks atomic commits or support for renaming files. VC supports all +basic editing operations under CVS, but for some less common tasks you +still need to call CVS from the command line. Note also that before +using CVS you must set up a repository, which is a subject too complex +to treat here. + +@cindex GNU Arch +@cindex Arch + GNU Arch is a new version control system that is designed for +distributed work. It differs in many ways from old well-known +systems, such as CVS and RCS. It supports different transports for +interoperating between users, offline operations, and it has good +branching and merging features. It also supports atomic commits, and +history of file renaming and moving. VC does not support all +operations provided by GNU Arch, so you must sometimes invoke it from +the command line, or use a specialized module. + +@cindex RCS + RCS is the free version control system around which VC was initially +built. The VC commands are therefore conceptually closest to RCS. +Almost everything you can do with RCS can be done through VC. You +cannot use RCS over the network though, and it only works at the level +of individual files, rather than projects. You should use it if you +want a simple, yet reliable tool for handling individual files. + +@cindex SVN +@cindex Subversion + Subversion is a free version control system designed to be similar +to CVS but without CVS's problems. Subversion supports atomic commits, +and versions directories, symbolic links, meta-data, renames, copies, +and deletes. It can be used via http or via its own protocol. + +@cindex MCVS +@cindex Meta-CVS + Meta-CVS is another attempt to solve problems arising in CVS. It +supports directory structure versioning, improved branching and +merging, and use of symbolic links and meta-data in repositories. + +@cindex SCCS + SCCS is a proprietary but widely used version control system. In +terms of capabilities, it is the weakest of the six that VC supports. +VC compensates for certain features missing in SCCS (snapshots, for +example) by implementing them itself, but some other VC features, such +as multiple branches, are not available with SCCS. Since SCCS is +non-free, not respecting its users freedom, you should not use it; +use its free replacement CSSC instead. But you should use CSSC only +if for some reason you cannot use RCS, or one of the higher-level +systems such as CVS or GNU Arch. + +In the following, we discuss mainly RCS, SCCS and CVS. Nearly +everything said about CVS applies to GNU Arch, Subversion and Meta-CVS +as well. + +@node VC Concepts +@subsubsection Concepts of Version Control + +@cindex master file +@cindex registered file + When a file is under version control, we also say that it is +@dfn{registered} in the version control system. Each registered file +has a corresponding @dfn{master file} which represents the file's +present state plus its change history---enough to reconstruct the +current version or any earlier version. Usually the master file also +records a @dfn{log entry} for each version, describing in words what was +changed in that version. + +@cindex work file +@cindex checking out files + The file that is maintained under version control is sometimes called +the @dfn{work file} corresponding to its master file. You edit the work +file and make changes in it, as you would with an ordinary file. (With +SCCS and RCS, you must @dfn{lock} the file before you start to edit it.) +After you are done with a set of changes, you @dfn{check the file in}, +which records the changes in the master file, along with a log entry for +them. + + To go beyond these basic concepts, you will need to understand three +ways in which version-control systems can differ from each other. They +can be locking or merging; they can be file-based or changeset-based; +and they can be centralized or decentralized. VC handles all these +choices, but they lead to differing behaviors which you will need +to understand as you use it. + +@cindex locking versus merging + A version control system typically has some mechanism to coordinate +between users who want to change the same file. One method is +@dfn{locking} (analogous to the locking that Emacs uses to detect +simultaneous editing of a file, but distinct from it). In a locking +system, such as SCCS, you must @dfn{lock} a file before you start to +edit it. The other method is @dfn{merging}; the system tries to +merge your changes with other people's changes when you check them in. + + With version control locking, work files are normally read-only so +that you cannot change them. You ask the version control system to make +a work file writable for you by locking it; only one user can do +this at any given time. When you check in your changes, that unlocks +the file, making the work file read-only again. This allows other users +to lock the file to make further changes. + + By contrast, a merging system lets each user check out and modify a +work file at any time. When you check in a a file, the system will +attempt to merge your changes with any others checked into the +repository since you checked out the file. + + Both locking and merging systems can have problems when multiple users +try to modify the same file at the same time. Locking systems have +@dfn{lock conflicts}; a user may try to check a file out and be unable +to because it is locked. In merging systems, @dfn{merge conflicts} +happen when you check in a change to a file that conflicts with a change +checked in by someone else after your checkout. Both kinds of conflict +have to be resolved by human judgment and communication. + + SCCS always uses locking. RCS is lock-based by default but can be told +to operate in a merging style. CVS is merge-based by default but can +be told to operate in a locking mode. Most later version-control +systems, such as Subversion and GNU Arch, have been fundamentally +merging-based rather than locking-based. This is because experience +has shown that the merging-based approach is generally superior to +the locking one, both in convenience to developers and in minimizing +the number and severity of conflicts that actually occur. + + While it is rather unlikely that anyone will ever again build a +fundamentally locking-based rather than merging-based version-control +system in the future, merging-based version-systems sometimes have locks +retrofitted onto them for reasons having nothing to do with technology. +@footnote{Usually the control-freak instincts of managers.} For this +reason, and to support older systems still in use, VC mode supports +both locking and merging version control and tries to hide the differences +between them as much as possible. + +@cindex files versus changesets. + On SCCS, RCS, CVS, and other early version-control systems, checkins +and other operations are @dfn{file-based}; each file has its own +@dfn{master file} with its own comment- and revision history separate +from that of all other files in the system. Later systems, beginning +with Subversion, are @dfn{changeset-based}; a checkin may include +changes to several files and that change set is treated as a unit by the +system. Any comment associated with the change doesn't belong to any +one file, but is attached to the changeset itself. + + Changeset-based version control is in general both more flexible and +more powerful than file-based version control; usually, when a change to +multiple files has to be backed out, it's good to be able to easily +identify and remove all of it. + +@cindex centralized vs. decentralized + Early version-control systems were designed around a @dfn{centralized} +model in which each project has only one repository used by all +developers. SCCS, RCS, CVS, and Subversion share this kind of model. +It has two important problems. One is that a single repository is a +single point of failure---if the repository server is down all work +stops. The other is that you need to be connected live to the server to +do checkins and checkouts; if you're offline, you can't work. + + Newer version-control systems like GNU Arch are @dfn{decentralized}. +A project may have several different repositories, and these systems +support a sort of super-merge between repositories that tries to +reconcile their change histories. At the limit, each developer has +his/her own repository, and repository merges replace checkin/commit +operations. + + VC's job is to help you manage the traffic between your personal +workfiles and a repository. Whether that repository is a single master +or one of a network of peer repositories is not something VC has to care +about. Thus, the difference between a centralized and a decentralized +version-control system is invisible to VC mode. + +@iftex +(@pxref{CVS Options,,,emacs-xtra, Specialized Emacs Features}). +@end iftex +@ifnottex +(@pxref{CVS Options}). +@end ifnottex + + +@node Types of Log File +@subsubsection Types of Log File +@cindex types of log file +@cindex log File, types of +@cindex version control log + + Projects that use a revision control system can have @emph{two} +types of log for changes. One is the per-file log maintained by the +revision control system: each time you check in a change, you must +fill out a @dfn{log entry} for the change (@pxref{Log Buffer}). This +kind of log is called the @dfn{version control log}, also the +@dfn{revision control log}, @dfn{RCS log}, or @dfn{CVS log}. + + The other kind of log is the file @file{ChangeLog} (@pxref{Change +Log}). It provides a chronological record of all changes to a large +portion of a program---typically one directory and its subdirectories. +A small program would use one @file{ChangeLog} file; a large program +may well merit a @file{ChangeLog} file in each major directory. +@xref{Change Log}. + + A project maintained with version control can use just the per-file +log, or it can use both kinds of logs. It can handle some files one +way and some files the other way. Each project has its policy, which +you should follow. + + When the policy is to use both, you typically want to write an entry +for each change just once, then put it into both logs. You can write +the entry in @file{ChangeLog}, then copy it to the log buffer when you +check in the change. Or you can write the entry in the log buffer +while checking in the change, and later use the @kbd{C-x v a} command +to copy it to @file{ChangeLog} +@iftex +(@pxref{Change Logs and VC,,,emacs-xtra, Specialized Emacs Features}). +@end iftex +@ifnottex +(@pxref{Change Logs and VC}). +@end ifnottex + + +@node VC Mode Line +@subsection Version Control and the Mode Line + + When you visit a file that is under version control, Emacs indicates +this on the mode line. For example, @samp{RCS-1.3} says that RCS is +used for that file, and the current version is 1.3. + + The character between the back-end name and the version number +indicates the version control status of the file. @samp{-} means that +the work file is not locked (if locking is in use), or not modified (if +locking is not in use). @samp{:} indicates that the file is locked, or +that it is modified. If the file is locked by some other user (for +instance, @samp{jim}), that is displayed as @samp{RCS:jim:1.3}. + +@vindex auto-revert-check-vc-info + When Auto Revert mode (@pxref{Reverting}) reverts a buffer that is +under version control, it updates the version control information in +the mode line. However, Auto Revert mode may not properly update this +information if the version control status changes without changes to +the work file, from outside the current Emacs session. If you set +@code{auto-revert-check-vc-info} to @code{t}, Auto Revert mode updates +the version control status information every +@code{auto-revert-interval} seconds, even if the work file itself is +unchanged. The resulting CPU usage depends on the version control +system, but is usually not excessive. + +@node Basic VC Editing +@subsection Basic Editing under Version Control + + The principal VC command is an all-purpose command that performs +either locking or check-in, depending on the situation. + +@table @kbd +@itemx C-x v v +Perform the next logical version control operation on this file. +@end table + +@findex vc-next-action +@kindex C-x v v + The precise action of this command depends on the state of the file, +and whether the version control system uses locking or not. SCCS and +RCS normally use locking; CVS normally does not use locking. + +@findex vc-toggle-read-only +@kindex C-x C-q @r{(Version Control)} + As a special convenience that is particularly useful for files with +locking, you can let Emacs check a file in or out whenever you change +its read-only flag. This means, for example, that you cannot +accidentally edit a file without properly checking it out first. To +achieve this, bind the key @kbd{C-x C-q} to @kbd{vc-toggle-read-only} +in your @file{~/.emacs} file. (@xref{Init Rebinding}.) + +@menu +* VC with Locking:: RCS in its default mode, SCCS, and optionally CVS. +* Without Locking:: Without locking: default mode for CVS. +* Advanced C-x v v:: Advanced features available with a prefix argument. +* Log Buffer:: Features available in log entry buffers. +@end menu + +@node VC with Locking +@subsubsection Basic Version Control with Locking + + If locking is used for the file (as with SCCS, and RCS in its default +mode), @kbd{C-x v v} can either lock a file or check it in: + +@itemize @bullet +@item +If the file is not locked, @kbd{C-x v v} locks it, and +makes it writable so that you can change it. + +@item +If the file is locked by you, and contains changes, @kbd{C-x v v} checks +in the changes. In order to do this, it first reads the log entry +for the new version. @xref{Log Buffer}. + +@item +If the file is locked by you, but you have not changed it since you +locked it, @kbd{C-x v v} releases the lock and makes the file read-only +again. + +@item +If the file is locked by some other user, @kbd{C-x v v} asks you whether +you want to ``steal the lock'' from that user. If you say yes, the file +becomes locked by you, but a message is sent to the person who had +formerly locked the file, to inform him of what has happened. +@end itemize + + These rules also apply when you use CVS in locking mode, except +that there is no such thing as stealing a lock. + +@node Without Locking +@subsubsection Basic Version Control without Locking + + When there is no locking---the default for CVS---work files are always +writable; you do not need to do anything before you begin to edit a +file. The status indicator on the mode line is @samp{-} if the file is +unmodified; it flips to @samp{:} as soon as you save any changes in the +work file. + + Here is what @kbd{C-x v v} does when using CVS: + +@itemize @bullet +@item +If some other user has checked in changes into the master file, Emacs +asks you whether you want to merge those changes into your own work +file. You must do this before you can check in your own changes. (To +pick up any recent changes from the master file @emph{without} trying +to commit your own changes, type @kbd{C-x v m @key{RET}}.) +@xref{Merging}. + +@item +If there are no new changes in the master file, but you have made +modifications in your work file, @kbd{C-x v v} checks in your changes. +In order to do this, it first reads the log entry for the new version. +@xref{Log Buffer}. + +@item +If the file is not modified, the @kbd{C-x v v} does nothing. +@end itemize + + These rules also apply when you use RCS in the mode that does not +require locking, except that automatic merging of changes from the +master file is not implemented. Unfortunately, this means that nothing +informs you if another user has checked in changes in the same file +since you began editing it, and when this happens, his changes will be +effectively removed when you check in your version (though they will +remain in the master file, so they will not be entirely lost). You must +therefore verify that the current version is unchanged, before you +check in your changes. We hope to eliminate this risk and provide +automatic merging with RCS in a future Emacs version. + + In addition, locking is possible with RCS even in this mode, although +it is not required; @kbd{C-x v v} with an unmodified file locks the +file, just as it does with RCS in its normal (locking) mode. + +@node Advanced C-x v v +@subsubsection Advanced Control in @kbd{C-x v v} + +@cindex version number to check in/out + When you give a prefix argument to @code{vc-next-action} (@kbd{C-u +C-x v v}), it still performs the next logical version control +operation, but accepts additional arguments to specify precisely how +to do the operation. + +@itemize @bullet +@item +If the file is modified (or locked), you can specify the version +number to use for the new version that you check in. This is one way +to create a new branch (@pxref{Branches}). + +@item +If the file is not modified (and unlocked), you can specify the +version to select; this lets you start working from an older version, +or on another branch. If you do not enter any version, that takes you +to the highest version on the current branch; therefore @kbd{C-u C-x +v v @key{RET}} is a convenient way to get the latest version of a file from +the repository. + +@item +@cindex specific version control system +Instead of the version number, you can also specify the name of a +version control system. This is useful when one file is being managed +with two version control systems at the same time +@iftex +(@pxref{Local Version Control,,,emacs-xtra, Specialized Emacs +Features}). +@end iftex +@ifnottex +(@pxref{Local Version Control}). +@end ifnottex + +@end itemize + +@node Log Buffer +@subsubsection Features of the Log Entry Buffer + + When you check in changes, @kbd{C-x v v} first reads a log entry. It +pops up a buffer called @samp{*VC-Log*} for you to enter the log entry. + + Sometimes the @samp{*VC-Log*} buffer contains default text when you enter it, +typically the last log message entered. If it does, mark and point +are set around the entire contents of the buffer so that it is easy to +kill the contents of the buffer with @kbd{C-w}. + +@findex log-edit-insert-changelog + If you work by writing entries in the @file{ChangeLog} +(@pxref{Change Log}) and then commit the change under revision +control, you can generate the Log Edit text from the ChangeLog using +@kbd{C-c C-a} (@kbd{log-edit-insert-changelog}). This looks for +entries for the file(s) concerned in the top entry in the ChangeLog +and uses those paragraphs as the log text. This text is only inserted +if the top entry was made under your user name on the current date. +@iftex +@xref{Change Logs and VC,,,emacs-xtra, Specialized Emacs Features}, +@end iftex +@ifnottex +@xref{Change Logs and VC}, +@end ifnottex +for the opposite way of working---generating ChangeLog entries from +the revision control log. + + In the @samp{*VC-Log*} buffer, @kbd{C-c C-f} (@kbd{M-x +log-edit-show-files}) shows the list of files to be committed in case +you need to check that. (This can be a list of more than one file if +you use VC Dired mode or PCL-CVS. +@iftex +@xref{VC Dired Mode,,,emacs-xtra, Specialized Emacs Features}, +@end iftex +@ifnottex +@xref{VC Dired Mode}, +@end ifnottex +and @ref{Top, , About PCL-CVS, pcl-cvs, PCL-CVS --- The Emacs +Front-End to CVS}.) + + When you have finished editing the log message, type @kbd{C-c C-c} to +exit the buffer and commit the change. + + To abort check-in, just @strong{don't} type @kbd{C-c C-c} in that +buffer. You can switch buffers and do other editing. As long as you +don't try to check in another file, the entry you were editing remains +in the @samp{*VC-Log*} buffer, and you can go back to that buffer at any +time to complete the check-in. + + If you change several source files for the same reason, it is often +convenient to specify the same log entry for many of the files. To do +this, use the history of previous log entries. The commands @kbd{M-n}, +@kbd{M-p}, @kbd{M-s} and @kbd{M-r} for doing this work just like the +minibuffer history commands (except that these versions are used outside +the minibuffer). + +@vindex vc-log-mode-hook + Each time you check in a file, the log entry buffer is put into VC Log +mode, which involves running two hooks: @code{text-mode-hook} and +@code{vc-log-mode-hook}. @xref{Hooks}. + +@node Old Versions +@subsection Examining And Comparing Old Versions + + One of the convenient features of version control is the ability +to examine any version of a file, or compare two versions. + +@table @kbd +@item C-x v ~ @var{version} @key{RET} +Examine version @var{version} of the visited file, in a buffer of its +own. + +@item C-x v = +Compare the current buffer contents with the master version from which +you started editing. + +@item C-u C-x v = @var{file} @key{RET} @var{oldvers} @key{RET} @var{newvers} @key{RET} +Compare the specified two versions of @var{file}. + +@item C-x v g +Display the file with per-line version information and using colors. +@end table + +@findex vc-version-other-window +@kindex C-x v ~ + To examine an old version in its entirety, visit the file and then type +@kbd{C-x v ~ @var{version} @key{RET}} (@code{vc-version-other-window}). +This puts the text of version @var{version} in a file named +@file{@var{filename}.~@var{version}~}, and visits it in its own buffer +in a separate window. (In RCS, you can also select an old version +and create a branch from it. @xref{Branches}.) + +@findex vc-diff +@kindex C-x v = + It is usually more convenient to compare two versions of the file, +with the command @kbd{C-x v =} (@code{vc-diff}). Plain @kbd{C-x v =} +compares the current buffer contents (saving them in the file if +necessary) with the master version from which you started editing the +file (this is not necessarily the latest version of the file). +@kbd{C-u C-x v =}, with a numeric argument, reads a file name and two +version numbers, then compares those versions of the specified file. +Both forms display the output in a special buffer in another window. + + You can specify a checked-in version by its number; an empty input +specifies the current contents of the work file (which may be different +from all the checked-in versions). You can also specify a snapshot name +@iftex +(@pxref{Snapshots,,,emacs-xtra, Specialized Emacs Features}) +@end iftex +@ifnottex +(@pxref{Snapshots}) +@end ifnottex +instead of one or both version numbers. + + If you supply a directory name instead of the name of a registered +file, this command compares the two specified versions of all registered +files in that directory and its subdirectories. + +@vindex vc-diff-switches +@vindex vc-rcs-diff-switches + @kbd{C-x v =} works by running a variant of the @code{diff} utility +designed to work with the version control system in use. When you +invoke @code{diff} this way, in addition to the options specified by +@code{diff-switches} (@pxref{Comparing Files}), it receives those +specified by @code{vc-diff-switches}, plus those specified for the +specific back end by @code{vc-@var{backend}-diff-switches}. For +instance, when the version control back end is RCS, @code{diff} uses +the options in @code{vc-rcs-diff-switches}. The +@samp{vc@dots{}diff-switches} variables are @code{nil} by default. + + The buffer produced by @kbd{C-x v =} supports the commands of +Compilation mode (@pxref{Compilation Mode}), such as @kbd{C-x `} and +@kbd{C-c C-c}, in both the ``old'' and ``new'' text, and they always +find the corresponding locations in the current work file. (Older +versions are not, in general, present as files on your disk.) + +@findex vc-annotate +@kindex C-x v g + For some back ends, you can display the file @dfn{annotated} with +per-line version information and using colors to enhance the visual +appearance, with the command @kbd{M-x vc-annotate}. It creates a new +buffer (the ``annotate buffer'') displaying the file's text, with each +part colored to show how old it is. Text colored red is new, blue means +old, and intermediate colors indicate intermediate ages. By default, +the color is scaled over the full range of ages, such that the oldest +changes are blue, and the newest changes are red. + + When you give a prefix argument to this command, it uses the +minibuffer to read two arguments: which version number to display and +annotate (instead of the current file contents), and the time span in +days the color range should cover. + + From the annotate buffer, these and other color scaling options are +available from the @samp{VC-Annotate} menu. In this buffer, you can +also use the following keys to browse the annotations of past revisions, +view diffs, or view log entries: + +@table @kbd +@item P +Annotate the previous revision, that is to say, the revision before +the one currently annotated. A numeric prefix argument is a repeat +count, so @kbd{C-u 10 P} would take you back 10 revisions. + +@item N +Annotate the next revision---the one after the revision currently +annotated. A numeric prefix argument is a repeat count. + +@item J +Annotate the revision indicated by the current line. + +@item A +Annotate the revision before the one indicated by the current line. +This is useful to see the state the file was in before the change on +the current line was made. + +@item D +Display the diff between the current line's revision and the previous +revision. This is useful to see what the current line's revision +actually changed in the file. + +@item L +Show the log of the current line's revision. This is useful to see +the author's description of the changes in the revision on the current +line. + +@item W +Annotate the workfile version--the one you are editing. If you used +@kbd{P} and @kbd{N} to browse to other revisions, use this key to +return to your current version. +@end table + +@node Secondary VC Commands +@subsection The Secondary Commands of VC + + This section explains the secondary commands of VC; those that you might +use once a day. + +@menu +* Registering:: Putting a file under version control. +* VC Status:: Viewing the VC status of files. +* VC Undo:: Canceling changes before or after check-in. +@ifnottex +* VC Dired Mode:: Listing files managed by version control. +* VC Dired Commands:: Commands to use in a VC Dired buffer. +@end ifnottex +@end menu + +@node Registering +@subsubsection Registering a File for Version Control + +@kindex C-x v i +@findex vc-register + You can put any file under version control by simply visiting it, and +then typing @w{@kbd{C-x v i}} (@code{vc-register}). + +@table @kbd +@item C-x v i +Register the visited file for version control. +@end table + + To register the file, Emacs must choose which version control system +to use for it. If the file's directory already contains files +registered in a version control system, Emacs uses that system. If +there is more than one system in use for a directory, Emacs uses the +one that appears first in @code{vc-handled-backends} +@iftex +(@pxref{Customizing VC,,,emacs-xtra, Specialized Emacs Features}). +@end iftex +@ifnottex +(@pxref{Customizing VC}). +@end ifnottex +On the other hand, if there are no files already registered, Emacs uses +the first system from @code{vc-handled-backends} that could register +the file (for example, you cannot register a file under CVS if its +directory is not already part of a CVS tree); with the default value +of @code{vc-handled-backends}, this means that Emacs uses RCS in this +situation. + + If locking is in use, @kbd{C-x v i} leaves the file unlocked and +read-only. Type @kbd{C-x v v} if you wish to start editing it. After +registering a file with CVS, you must subsequently commit the initial +version by typing @kbd{C-x v v}. Until you do that, the version +appears as @samp{@@@@} in the mode line. + +@vindex vc-default-init-version +@cindex initial version number to register + The initial version number for a newly registered file is 1.1, by +default. You can specify a different default by setting the variable +@code{vc-default-init-version}, or you can give @kbd{C-x v i} a numeric +argument; then it reads the initial version number for this particular +file using the minibuffer. + +@vindex vc-initial-comment + If @code{vc-initial-comment} is non-@code{nil}, @kbd{C-x v i} reads an +initial comment to describe the purpose of this source file. Reading +the initial comment works like reading a log entry (@pxref{Log Buffer}). + +@node VC Status +@subsubsection VC Status Commands + +@table @kbd +@item C-x v l +Display version control state and change history. +@end table + +@kindex C-x v l +@findex vc-print-log + To view the detailed version control status and history of a file, +type @kbd{C-x v l} (@code{vc-print-log}). It displays the history of +changes to the current file, including the text of the log entries. The +output appears in a separate window. The point is centered at the +revision of the file that is currently being visited. + + In the change log buffer, you can use the following keys to move +between the logs of revisions and of files, to view past revisions, and +to view diffs: + +@table @kbd +@item p +Move to the previous revision-item in the buffer. (Revision entries in the log +buffer are usually in reverse-chronological order, so the previous +revision-item usually corresponds to a newer revision.) A numeric +prefix argument is a repeat count. + +@item n +Move to the next revision-item (which most often corresponds to the +previous revision of the file). A numeric prefix argument is a repeat +count. + +@item P +Move to the log of the previous file, when the logs of multiple files +are in the log buffer +@iftex +(@pxref{VC Dired Mode,,,emacs-xtra, Specialized Emacs Features}). +@end iftex +@ifnottex +(@pxref{VC Dired Mode}). +@end ifnottex +Otherwise, just move to the beginning of the log. A numeric prefix +argument is a repeat count, so @kbd{C-u 10 P} would move backward 10 +files. + +@item N +Move to the log of the next file, when the logs of multiple files are +in the log buffer +@iftex +(@pxref{VC Dired Mode,,,emacs-xtra, Specialized Emacs Features}). +@end iftex +@ifnottex +(@pxref{VC Dired Mode}). +@end ifnottex +It also takes a numeric prefix argument as a repeat count. + +@item f +Visit the revision indicated at the current line, like typing @kbd{C-x +v ~} and specifying this revision's number (@pxref{Old Versions}). + +@item d +Display the diff (@pxref{Comparing Files}) between the revision +indicated at the current line and the next earlier revision. This is +useful to see what actually changed when the revision indicated on the +current line was committed. +@end table + +@node VC Undo +@subsubsection Undoing Version Control Actions + +@table @kbd +@item C-x v u +Revert the buffer and the file to the version from which you started +editing the file. + +@item C-x v c +Remove the last-entered change from the master for the visited file. +This undoes your last check-in. +@end table + +@kindex C-x v u +@findex vc-revert-buffer + If you want to discard your current set of changes and revert to the +version from which you started editing the file, use @kbd{C-x v u} +(@code{vc-revert-buffer}). This leaves the file unlocked; if locking +is in use, you must first lock the file again before you change it +again. @kbd{C-x v u} requires confirmation, unless it sees that you +haven't made any changes with respect to the master version. + + @kbd{C-x v u} is also the command to unlock a file if you lock it and +then decide not to change it. + +@kindex C-x v c +@findex vc-cancel-version + To cancel a change that you already checked in, use @kbd{C-x v c} +(@code{vc-cancel-version}). This command discards all record of the +most recent checked-in version, but only if your work file corresponds +to that version---you cannot use @kbd{C-x v c} to cancel a version +that is not the latest on its branch. @kbd{C-x v c} also offers to +revert your work file and buffer to the previous version (the one that +precedes the version that is deleted). + + If you answer @kbd{no}, VC keeps your changes in the buffer, and locks +the file. The no-revert option is useful when you have checked in a +change and then discover a trivial error in it; you can cancel the +erroneous check-in, fix the error, and check the file in again. + + When @kbd{C-x v c} does not revert the buffer, it unexpands all +version control headers in the buffer instead +@iftex +(@pxref{Version Headers,,,emacs-xtra, Specialized Emacs Features}). +@end iftex +@ifnottex +(@pxref{Version Headers}). +@end ifnottex +This is because the buffer no longer corresponds to any existing +version. If you check it in again, the check-in process will expand +the headers properly for the new version number. + + However, it is impossible to unexpand the RCS @samp{@w{$}Log$} header +automatically. If you use that header feature, you have to unexpand it +by hand---by deleting the entry for the version that you just canceled. + + Be careful when invoking @kbd{C-x v c}, as it is easy to lose a lot of +work with it. To help you be careful, this command always requires +confirmation with @kbd{yes}. Note also that this command is disabled +under CVS, because canceling versions is very dangerous and discouraged +with CVS. + +@ifnottex +@c vc1-xtra.texi needs extra level of lowering. +@lowersections +@include vc1-xtra.texi +@raisesections +@end ifnottex + +@node Branches +@subsection Multiple Branches of a File +@cindex branch (version control) +@cindex trunk (version control) + + One use of version control is to maintain multiple ``current'' +versions of a file. For example, you might have different versions of a +program in which you are gradually adding various unfinished new +features. Each such independent line of development is called a +@dfn{branch}. VC allows you to create branches, switch between +different branches, and merge changes from one branch to another. +Please note, however, that branches are not supported for SCCS. + + A file's main line of development is usually called the @dfn{trunk}. +The versions on the trunk are normally numbered 1.1, 1.2, 1.3, etc. At +any such version, you can start an independent branch. A branch +starting at version 1.2 would have version number 1.2.1.1, and consecutive +versions on this branch would have numbers 1.2.1.2, 1.2.1.3, 1.2.1.4, +and so on. If there is a second branch also starting at version 1.2, it +would consist of versions 1.2.2.1, 1.2.2.2, 1.2.2.3, etc. + +@cindex head version + If you omit the final component of a version number, that is called a +@dfn{branch number}. It refers to the highest existing version on that +branch---the @dfn{head version} of that branch. The branches in the +example above have branch numbers 1.2.1 and 1.2.2. + +@menu +* Switching Branches:: How to get to another existing branch. +* Creating Branches:: How to start a new branch. +* Merging:: Transferring changes between branches. +* Multi-User Branching:: Multiple users working at multiple branches + in parallel. +@end menu + +@node Switching Branches +@subsubsection Switching between Branches + + To switch between branches, type @kbd{C-u C-x v v} and specify the +version number you want to select. This version is then visited +@emph{unlocked} (write-protected), so you can examine it before locking +it. Switching branches in this way is allowed only when the file is not +locked. + + You can omit the minor version number, thus giving only the branch +number; this takes you to the head version on the chosen branch. If you +only type @key{RET}, Emacs goes to the highest version on the trunk. + + After you have switched to any branch (including the main branch), you +stay on it for subsequent VC commands, until you explicitly select some +other branch. + +@node Creating Branches +@subsubsection Creating New Branches + + To create a new branch from a head version (one that is the latest in +the branch that contains it), first select that version if necessary, +lock it with @kbd{C-x v v}, and make whatever changes you want. Then, +when you check in the changes, use @kbd{C-u C-x v v}. This lets you +specify the version number for the new version. You should specify a +suitable branch number for a branch starting at the current version. +For example, if the current version is 2.5, the branch number should be +2.5.1, 2.5.2, and so on, depending on the number of existing branches at +that point. + + To create a new branch at an older version (one that is no longer the +head of a branch), first select that version (@pxref{Switching +Branches}), then lock it with @kbd{C-x v v}. You'll be asked to +confirm, when you lock the old version, that you really mean to create a +new branch---if you say no, you'll be offered a chance to lock the +latest version instead. + + Then make your changes and type @kbd{C-x v v} again to check in a new +version. This automatically creates a new branch starting from the +selected version. You need not specially request a new branch, because +that's the only way to add a new version at a point that is not the head +of a branch. + + After the branch is created, you ``stay'' on it. That means that +subsequent check-ins create new versions on that branch. To leave the +branch, you must explicitly select a different version with @kbd{C-u C-x +v v}. To transfer changes from one branch to another, use the merge +command, described in the next section. + +@node Merging +@subsubsection Merging Branches + +@cindex merging changes + When you have finished the changes on a certain branch, you will +often want to incorporate them into the file's main line of development +(the trunk). This is not a trivial operation, because development might +also have proceeded on the trunk, so that you must @dfn{merge} the +changes into a file that has already been changed otherwise. VC allows +you to do this (and other things) with the @code{vc-merge} command. + +@table @kbd +@item C-x v m (vc-merge) +Merge changes into the work file. +@end table + +@kindex C-x v m +@findex vc-merge + @kbd{C-x v m} (@code{vc-merge}) takes a set of changes and merges it +into the current version of the work file. It firsts asks you in the +minibuffer where the changes should come from. If you just type +@key{RET}, Emacs merges any changes that were made on the same branch +since you checked the file out (we call this @dfn{merging the news}). +This is the common way to pick up recent changes from the repository, +regardless of whether you have already changed the file yourself. + + You can also enter a branch number or a pair of version numbers in +the minibuffer. Then @kbd{C-x v m} finds the changes from that +branch, or the differences between the two versions you specified, and +merges them into the current version of the current file. + + As an example, suppose that you have finished a certain feature on +branch 1.3.1. In the meantime, development on the trunk has proceeded +to version 1.5. To merge the changes from the branch to the trunk, +first go to the head version of the trunk, by typing @kbd{C-u C-x v v +@key{RET}}. Version 1.5 is now current. If locking is used for the file, +type @kbd{C-x v v} to lock version 1.5 so that you can change it. Next, +type @kbd{C-x v m 1.3.1 @key{RET}}. This takes the entire set of changes on +branch 1.3.1 (relative to version 1.3, where the branch started, up to +the last version on the branch) and merges it into the current version +of the work file. You can now check in the changed file, thus creating +version 1.6 containing the changes from the branch. + + It is possible to do further editing after merging the branch, before +the next check-in. But it is usually wiser to check in the merged +version, then lock it and make the further changes. This will keep +a better record of the history of changes. + +@cindex conflicts +@cindex resolving conflicts + When you merge changes into a file that has itself been modified, the +changes might overlap. We call this situation a @dfn{conflict}, and +reconciling the conflicting changes is called @dfn{resolving a +conflict}. + + Whenever conflicts occur during merging, VC detects them, tells you +about them in the echo area, and asks whether you want help in merging. +If you say yes, it starts an Ediff session (@pxref{Top, +Ediff, Ediff, ediff, The Ediff Manual}). + + If you say no, the conflicting changes are both inserted into the +file, surrounded by @dfn{conflict markers}. The example below shows how +a conflict region looks; the file is called @samp{name} and the current +master file version with user B's changes in it is 1.11. + +@c @w here is so CVS won't think this is a conflict. +@smallexample +@group +@w{<}<<<<<< name + @var{User A's version} +======= + @var{User B's version} +@w{>}>>>>>> 1.11 +@end group +@end smallexample + +@cindex vc-resolve-conflicts + Then you can resolve the conflicts by editing the file manually. Or +you can type @code{M-x vc-resolve-conflicts} after visiting the file. +This starts an Ediff session, as described above. Don't forget to +check in the merged version afterwards. + +@node Multi-User Branching +@subsubsection Multi-User Branching + + It is often useful for multiple developers to work simultaneously on +different branches of a file. CVS allows this by default; for RCS, it +is possible if you create multiple source directories. Each source +directory should have a link named @file{RCS} which points to a common +directory of RCS master files. Then each source directory can have its +own choice of selected versions, but all share the same common RCS +records. + + This technique works reliably and automatically, provided that the +source files contain RCS version headers +@iftex +(@pxref{Version Headers,,,emacs-xtra, Specialized Emacs Features}). +@end iftex +@ifnottex +(@pxref{Version Headers}). +@end ifnottex +The headers enable Emacs to be sure, at all times, which version +number is present in the work file. + + If the files do not have version headers, you must instead tell Emacs +explicitly in each session which branch you are working on. To do this, +first find the file, then type @kbd{C-u C-x v v} and specify the correct +branch number. This ensures that Emacs knows which branch it is using +during this particular editing session. + +@ifnottex +@include vc2-xtra.texi +@end ifnottex + +@node Directories +@section File Directories + +@cindex file directory +@cindex directory listing + The file system groups files into @dfn{directories}. A @dfn{directory +listing} is a list of all the files in a directory. Emacs provides +commands to create and delete directories, and to make directory +listings in brief format (file names only) and verbose format (sizes, +dates, and authors included). Emacs also includes a directory browser +feature called Dired; see @ref{Dired}. + +@table @kbd +@item C-x C-d @var{dir-or-pattern} @key{RET} +Display a brief directory listing (@code{list-directory}). +@item C-u C-x C-d @var{dir-or-pattern} @key{RET} +Display a verbose directory listing. +@item M-x make-directory @key{RET} @var{dirname} @key{RET} +Create a new directory named @var{dirname}. +@item M-x delete-directory @key{RET} @var{dirname} @key{RET} +Delete the directory named @var{dirname}. It must be empty, +or you get an error. +@end table + +@findex list-directory +@kindex C-x C-d + The command to display a directory listing is @kbd{C-x C-d} +(@code{list-directory}). It reads using the minibuffer a file name +which is either a directory to be listed or a wildcard-containing +pattern for the files to be listed. For example, + +@example +C-x C-d /u2/emacs/etc @key{RET} +@end example + +@noindent +lists all the files in directory @file{/u2/emacs/etc}. Here is an +example of specifying a file name pattern: + +@example +C-x C-d /u2/emacs/src/*.c @key{RET} +@end example + + Normally, @kbd{C-x C-d} displays a brief directory listing containing +just file names. A numeric argument (regardless of value) tells it to +make a verbose listing including sizes, dates, and owners (like +@samp{ls -l}). + +@vindex list-directory-brief-switches +@vindex list-directory-verbose-switches + The text of a directory listing is mostly obtained by running +@code{ls} in an inferior process. Two Emacs variables control the +switches passed to @code{ls}: @code{list-directory-brief-switches} is +a string giving the switches to use in brief listings (@code{"-CF"} by +default), and @code{list-directory-verbose-switches} is a string +giving the switches to use in a verbose listing (@code{"-l"} by +default). + +@vindex directory-free-space-program +@vindex directory-free-space-args + In verbose directory listings, Emacs adds information about the +amount of free space on the disk that contains the directory. To do +this, it runs the program specified by +@code{directory-free-space-program} with arguments +@code{directory-free-space-args}. + +@node Comparing Files +@section Comparing Files +@cindex comparing files + +@findex diff +@vindex diff-switches + The command @kbd{M-x diff} compares two files, displaying the +differences in an Emacs buffer named @samp{*diff*}. It works by +running the @code{diff} program, using options taken from the variable +@code{diff-switches}. The value of @code{diff-switches} should be a +string; the default is @code{"-c"} to specify a context diff. +@xref{Top,, Diff, diff, Comparing and Merging Files}, for more +information about @command{diff} output formats. + +@findex diff-backup + The command @kbd{M-x diff-backup} compares a specified file with its most +recent backup. If you specify the name of a backup file, +@code{diff-backup} compares it with the source file that it is a backup +of. + +@findex compare-windows + The command @kbd{M-x compare-windows} compares the text in the +current window with that in the next window. (For more information +about windows in Emacs, @ref{Windows}.) Comparison starts at point in +each window, after pushing each initial point value on the mark ring +in its respective buffer. Then it moves point forward in each window, +one character at a time, until it reaches characters that don't match. +Then the command exits. + + If point in the two windows is followed by non-matching text when +the command starts, @kbd{M-x compare-windows} tries heuristically to +advance up to matching text in the two windows, and then exits. So if +you use @kbd{M-x compare-windows} repeatedly, each time it either +skips one matching range or finds the start of another. + +@vindex compare-ignore-case +@vindex compare-ignore-whitespace + With a numeric argument, @code{compare-windows} ignores changes in +whitespace. If the variable @code{compare-ignore-case} is +non-@code{nil}, the comparison ignores differences in case as well. +If the variable @code{compare-ignore-whitespace} is non-@code{nil}, +@code{compare-windows} normally ignores changes in whitespace, and a +prefix argument turns that off. + +@cindex Smerge mode +@findex smerge-mode +@cindex failed merges +@cindex merges, failed +@cindex comparing 3 files (@code{diff3}) + You can use @kbd{M-x smerge-mode} to turn on Smerge mode, a minor +mode for editing output from the @command{diff3} program. This is +typically the result of a failed merge from a version control system +``update'' outside VC, due to conflicting changes to a file. Smerge +mode provides commands to resolve conflicts by selecting specific +changes. + +@iftex +@xref{Emerge,,, emacs-xtra, Specialized Emacs Features}, +@end iftex +@ifnottex +@xref{Emerge}, +@end ifnottex +for the Emerge facility, which provides a powerful interface for +merging files. + +@node Diff Mode +@section Diff Mode +@cindex Diff mode +@findex diff-mode +@cindex patches, editing + + Diff mode is used for the output of @kbd{M-x diff}; it is also +useful for editing patches and comparisons produced by the +@command{diff} program. To select Diff mode manually, type @kbd{M-x +diff-mode}. + + One general feature of Diff mode is that manual edits to the patch +automatically correct line numbers, including those in the hunk +header, so that you can actually apply the edited patch. Diff mode +treats each hunk location as an ``error message,'' so that you can use +commands such as @kbd{C-x '} to visit the corresponding source +locations. It also provides the following commands to navigate, +manipulate and apply parts of patches: + +@table @kbd +@item M-n +Move to the next hunk-start (@code{diff-hunk-next}). + +@item M-p +Move to the previous hunk-start (@code{diff-hunk-prev}). + +@item M-@} +Move to the next file-start, in a multi-file patch +(@code{diff-file-next}). + +@item M-@{ +Move to the previous file-start, in a multi-file patch +(@code{diff-file-prev}). + +@item M-k +Kill the hunk at point (@code{diff-hunk-kill}). + +@item M-K +In a multi-file patch, kill the current file part. +(@code{diff-file-kill}). + +@item C-c C-a +Apply this hunk to its target file (@code{diff-apply-hunk}). With a +prefix argument of @kbd{C-u}, revert this hunk. + +@item C-c C-c +Go to the source corresponding to this hunk (@code{diff-goto-source}). + +@item C-c C-e +Start an Ediff session with the patch (@code{diff-ediff-patch}). +@xref{Top, Ediff, Ediff, ediff, The Ediff Manual}. + +@item C-c C-n +Restrict the view to the current hunk (@code{diff-restrict-view}). +@xref{Narrowing}. With a prefix argument of @kbd{C-u}, restrict the +view to the current patch of a multiple file patch. To widen again, +use @kbd{C-x n w}. + +@item C-c C-r +Reverse the direction of comparison for the entire buffer +(@code{diff-reverse-direction}). + +@item C-c C-s +Split the hunk at point (@code{diff-split-hunk}). This is for +manually editing patches, and only works with the unified diff format. + +@item C-c C-u +Convert the entire buffer to unified format +(@code{diff-context->unified}). With a prefix argument, convert +unified format to context format. In Transient Mark mode, when the +mark is active, this command operates only on the region. + +@item C-c C-w +Refine the current hunk so that it disregards changes in whitespace +(@code{diff-refine-hunk}). +@end table + + @kbd{C-x 4 a} in Diff mode operates on behalf of the target file, +but gets the function name from the patch itself. @xref{Change Log}. +This is useful for making log entries for functions that are deleted +by the patch. + +@node Misc File Ops +@section Miscellaneous File Operations + + Emacs has commands for performing many other operations on files. +All operate on one file; they do not accept wildcard file names. + +@findex view-file +@cindex viewing +@cindex View mode +@cindex mode, View + @kbd{M-x view-file} allows you to scan or read a file by sequential +screenfuls. It reads a file name argument using the minibuffer. After +reading the file into an Emacs buffer, @code{view-file} displays the +beginning. You can then type @key{SPC} to scroll forward one windowful, +or @key{DEL} to scroll backward. Various other commands are provided +for moving around in the file, but none for changing it; type @kbd{?} +while viewing for a list of them. They are mostly the same as normal +Emacs cursor motion commands. To exit from viewing, type @kbd{q}. +The commands for viewing are defined by a special minor mode called View +mode. + + A related command, @kbd{M-x view-buffer}, views a buffer already present +in Emacs. @xref{Misc Buffer}. + +@kindex C-x i +@findex insert-file + @kbd{M-x insert-file} (also @kbd{C-x i}) inserts a copy of the +contents of the specified file into the current buffer at point, +leaving point unchanged before the contents and the mark after them. + +@findex insert-file-literally + @kbd{M-x insert-file-literally} is like @kbd{M-x insert-file}, +except the file is inserted ``literally'': it is treated as a sequence +of @acronym{ASCII} characters with no special encoding or conversion, +similar to the @kbd{M-x find-file-literally} command +(@pxref{Visiting}). + +@findex write-region + @kbd{M-x write-region} is the inverse of @kbd{M-x insert-file}; it +copies the contents of the region into the specified file. @kbd{M-x +append-to-file} adds the text of the region to the end of the +specified file. @xref{Accumulating Text}. The variable +@code{write-region-inhibit-fsync} applies to these commands, as well +as saving files; see @ref{Customize Save}. + +@findex delete-file +@cindex deletion (of files) + @kbd{M-x delete-file} deletes the specified file, like the @code{rm} +command in the shell. If you are deleting many files in one directory, it +may be more convenient to use Dired (@pxref{Dired}). + +@findex rename-file + @kbd{M-x rename-file} reads two file names @var{old} and @var{new} using +the minibuffer, then renames file @var{old} as @var{new}. If the file name +@var{new} already exists, you must confirm with @kbd{yes} or renaming is not +done; this is because renaming causes the old meaning of the name @var{new} +to be lost. If @var{old} and @var{new} are on different file systems, the +file @var{old} is copied and deleted. + + If the argument @var{new} is just a directory name, the real new +name is in that directory, with the same non-directory component as +@var{old}. For example, @kbd{M-x rename-file RET ~/foo RET /tmp RET} +renames @file{~/foo} to @file{/tmp/foo}. The same rule applies to all +the remaining commands in this section. All of them ask for +confirmation when the new file name already exists, too. + +@findex add-name-to-file +@cindex hard links (creation) + The similar command @kbd{M-x add-name-to-file} is used to add an +additional name to an existing file without removing its old name. +The new name is created as a ``hard link'' to the existing file. +The new name must belong on the same file system that the file is on. +On MS-Windows, this command works only if the file resides in an NTFS +file system. On MS-DOS, it works by copying the file. + +@findex copy-file +@cindex copying files + @kbd{M-x copy-file} reads the file @var{old} and writes a new file +named @var{new} with the same contents. + +@findex make-symbolic-link +@cindex symbolic links (creation) + @kbd{M-x make-symbolic-link} reads two file names @var{target} and +@var{linkname}, then creates a symbolic link named @var{linkname}, +which points at @var{target}. The effect is that future attempts to +open file @var{linkname} will refer to whatever file is named +@var{target} at the time the opening is done, or will get an error if +the name @var{target} is nonexistent at that time. This command does +not expand the argument @var{target}, so that it allows you to specify +a relative name as the target of the link. + + Not all systems support symbolic links; on systems that don't +support them, this command is not defined. + +@node Compressed Files +@section Accessing Compressed Files +@cindex compression +@cindex uncompression +@cindex Auto Compression mode +@cindex mode, Auto Compression +@pindex gzip + + Emacs automatically uncompresses compressed files when you visit +them, and automatically recompresses them if you alter them and save +them. Emacs recognizes compressed files by their file names. File +names ending in @samp{.gz} indicate a file compressed with +@code{gzip}. Other endings indicate other compression programs. + + Automatic uncompression and compression apply to all the operations in +which Emacs uses the contents of a file. This includes visiting it, +saving it, inserting its contents into a buffer, loading it, and byte +compiling it. + +@findex auto-compression-mode +@vindex auto-compression-mode + To disable this feature, type the command @kbd{M-x +auto-compression-mode}. You can disable it permanently by +customizing the variable @code{auto-compression-mode}. + +@node File Archives +@section File Archives +@cindex mode, tar +@cindex Tar mode +@cindex file archives + + A file whose name ends in @samp{.tar} is normally an @dfn{archive} +made by the @code{tar} program. Emacs views these files in a special +mode called Tar mode which provides a Dired-like list of the contents +(@pxref{Dired}). You can move around through the list just as you +would in Dired, and visit the subfiles contained in the archive. +However, not all Dired commands are available in Tar mode. + + If Auto Compression mode is enabled (@pxref{Compressed Files}), then +Tar mode is used also for compressed archives---files with extensions +@samp{.tgz}, @code{.tar.Z} and @code{.tar.gz}. + + The keys @kbd{e}, @kbd{f} and @key{RET} all extract a component file +into its own buffer. You can edit it there, and if you save the +buffer, the edited version will replace the version in the Tar buffer. +@kbd{v} extracts a file into a buffer in View mode. @kbd{o} extracts +the file and displays it in another window, so you could edit the file +and operate on the archive simultaneously. @kbd{d} marks a file for +deletion when you later use @kbd{x}, and @kbd{u} unmarks a file, as in +Dired. @kbd{C} copies a file from the archive to disk and @kbd{R} +renames a file within the archive. @kbd{g} reverts the buffer from +the archive on disk. + + The keys @kbd{M}, @kbd{G}, and @kbd{O} change the file's permission +bits, group, and owner, respectively. + + If your display supports colors and the mouse, moving the mouse +pointer across a file name highlights that file name, indicating that +you can click on it. Clicking @kbd{Mouse-2} on the highlighted file +name extracts the file into a buffer and displays that buffer. + + Saving the Tar buffer writes a new version of the archive to disk with +the changes you made to the components. + + You don't need the @code{tar} program to use Tar mode---Emacs reads +the archives directly. However, accessing compressed archives +requires the appropriate uncompression program. + +@cindex Archive mode +@cindex mode, archive +@cindex @code{arc} +@cindex @code{jar} +@cindex @code{zip} +@cindex @code{lzh} +@cindex @code{zoo} +@pindex arc +@pindex jar +@pindex zip +@pindex lzh +@pindex zoo +@cindex Java class archives +@cindex unzip archives + A separate but similar Archive mode is used for archives produced by +the programs @code{arc}, @code{jar}, @code{lzh}, @code{zip}, and +@code{zoo}, which have extensions corresponding to the program names. +Archive mode also works for those @code{exe} files that are +self-extracting executables. + + The key bindings of Archive mode are similar to those in Tar mode, +with the addition of the @kbd{m} key which marks a file for subsequent +operations, and @kbd{M-@key{DEL}} which unmarks all the marked files. +Also, the @kbd{a} key toggles the display of detailed file +information, for those archive types where it won't fit in a single +line. Operations such as renaming a subfile, or changing its mode or +owner, are supported only for some of the archive formats. + + Unlike Tar mode, Archive mode runs the archiving program to unpack +and repack archives. Details of the program names and their options +can be set in the @samp{Archive} Customize group. However, you don't +need these programs to look at the archive table of contents, only to +extract or manipulate the subfiles in the archive. + +@node Remote Files +@section Remote Files + +@cindex Tramp +@cindex FTP +@cindex remote file access + You can refer to files on other machines using a special file name +syntax: + +@example +@group +/@var{host}:@var{filename} +/@var{user}@@@var{host}:@var{filename} +/@var{user}@@@var{host}#@var{port}:@var{filename} +/@var{method}:@var{user}@@@var{host}:@var{filename} +/@var{method}:@var{user}@@@var{host}#@var{port}:@var{filename} +@end group +@end example + +@noindent +To carry out this request, Emacs uses either the FTP program or a +remote-login program such as @command{ssh}, @command{rlogin}, or +@command{telnet}. You can always specify in the file name which +method to use---for example, +@file{/ftp:@var{user}@@@var{host}:@var{filename}} uses FTP, whereas +@file{/ssh:@var{user}@@@var{host}:@var{filename}} uses @command{ssh}. +When you don't specify a method in the file name, Emacs chooses +the method as follows: + +@enumerate +@item +If the host name starts with @samp{ftp.} (with dot), then Emacs uses +FTP. +@item +If the user name is @samp{ftp} or @samp{anonymous}, then Emacs uses +FTP. +@item +Otherwise, Emacs uses @command{ssh}. +@end enumerate + +@noindent +Remote file access through FTP is handled by the Ange-FTP package, which +is documented in the following. Remote file access through the other +methods is handled by the Tramp package, which has its own manual. +@xref{Top, The Tramp Manual,, tramp, The Tramp Manual}. + +When the Ange-FTP package is used, Emacs logs in through FTP using your +user name or the name @var{user}. It may ask you for a password from +time to time; this is used for logging in on @var{host}. The form using +@var{port} allows you to access servers running on a non-default TCP +port. + +@cindex backups for remote files +@vindex ange-ftp-make-backup-files + If you want to disable backups for remote files, set the variable +@code{ange-ftp-make-backup-files} to @code{nil}. + + By default, the auto-save files (@pxref{Auto Save Files}) for remote +files are made in the temporary file directory on the local machine. +This is achieved using the variable @code{auto-save-file-name-transforms}. + +@cindex ange-ftp +@vindex ange-ftp-default-user +@cindex user name for remote file access + Normally, if you do not specify a user name in a remote file name, +that means to use your own user name. But if you set the variable +@code{ange-ftp-default-user} to a string, that string is used instead. + +@cindex anonymous FTP +@vindex ange-ftp-generate-anonymous-password + To visit files accessible by anonymous FTP, you use special user +names @samp{anonymous} or @samp{ftp}. Passwords for these user names +are handled specially. The variable +@code{ange-ftp-generate-anonymous-password} controls what happens: if +the value of this variable is a string, then that string is used as +the password; if non-@code{nil} (the default), then the value of +@code{user-mail-address} is used; if @code{nil}, then Emacs prompts +you for a password as usual. + +@cindex firewall, and accessing remote files +@cindex gateway, and remote file access with @code{ange-ftp} +@vindex ange-ftp-smart-gateway +@vindex ange-ftp-gateway-host + Sometimes you may be unable to access files on a remote machine +because a @dfn{firewall} in between blocks the connection for security +reasons. If you can log in on a @dfn{gateway} machine from which the +target files @emph{are} accessible, and whose FTP server supports +gatewaying features, you can still use remote file names; all you have +to do is specify the name of the gateway machine by setting the +variable @code{ange-ftp-gateway-host}, and set +@code{ange-ftp-smart-gateway} to @code{t}. Otherwise you may be able +to make remote file names work, but the procedure is complex. You can +read the instructions by typing @kbd{M-x finder-commentary @key{RET} +ange-ftp @key{RET}}. + +@vindex file-name-handler-alist +@cindex disabling remote files + You can entirely turn off the FTP file name feature by removing the +entries @code{ange-ftp-completion-hook-function} and +@code{ange-ftp-hook-function} from the variable +@code{file-name-handler-alist}. You can turn off the feature in +individual cases by quoting the file name with @samp{/:} (@pxref{Quoted +File Names}). + +@node Quoted File Names +@section Quoted File Names + +@cindex quoting file names +@cindex file names, quote special characters + You can @dfn{quote} an absolute file name to prevent special +characters and syntax in it from having their special effects. +The way to do this is to add @samp{/:} at the beginning. + + For example, you can quote a local file name which appears remote, to +prevent it from being treated as a remote file name. Thus, if you have +a directory named @file{/foo:} and a file named @file{bar} in it, you +can refer to that file in Emacs as @samp{/:/foo:/bar}. + + @samp{/:} can also prevent @samp{~} from being treated as a special +character for a user's home directory. For example, @file{/:/tmp/~hack} +refers to a file whose name is @file{~hack} in directory @file{/tmp}. + + Quoting with @samp{/:} is also a way to enter in the minibuffer a +file name that contains @samp{$}. In order for this to work, the +@samp{/:} must be at the beginning of the minibuffer contents. (You +can also double each @samp{$}; see @ref{File Names with $}.) + + You can also quote wildcard characters with @samp{/:}, for visiting. +For example, @file{/:/tmp/foo*bar} visits the file +@file{/tmp/foo*bar}. + + Another method of getting the same result is to enter +@file{/tmp/foo[*]bar}, which is a wildcard specification that matches +only @file{/tmp/foo*bar}. However, in many cases there is no need to +quote the wildcard characters because even unquoted they give the +right result. For example, if the only file name in @file{/tmp} that +starts with @samp{foo} and ends with @samp{bar} is @file{foo*bar}, +then specifying @file{/tmp/foo*bar} will visit only +@file{/tmp/foo*bar}. + +@node File Name Cache +@section File Name Cache + +@cindex file name caching +@cindex cache of file names +@pindex find +@kindex C-@key{TAB} +@findex file-cache-minibuffer-complete + You can use the @dfn{file name cache} to make it easy to locate a +file by name, without having to remember exactly where it is located. +When typing a file name in the minibuffer, @kbd{C-@key{tab}} +(@code{file-cache-minibuffer-complete}) completes it using the file +name cache. If you repeat @kbd{C-@key{tab}}, that cycles through the +possible completions of what you had originally typed. (However, note +that the @kbd{C-@key{tab}} character cannot be typed on most text-only +terminals.) + + The file name cache does not fill up automatically. Instead, you +load file names into the cache using these commands: + +@findex file-cache-add-directory +@table @kbd +@item M-x file-cache-add-directory @key{RET} @var{directory} @key{RET} +Add each file name in @var{directory} to the file name cache. +@item M-x file-cache-add-directory-using-find @key{RET} @var{directory} @key{RET} +Add each file name in @var{directory} and all of its nested +subdirectories to the file name cache. +@item M-x file-cache-add-directory-using-locate @key{RET} @var{directory} @key{RET} +Add each file name in @var{directory} and all of its nested +subdirectories to the file name cache, using @command{locate} to find +them all. +@item M-x file-cache-add-directory-list @key{RET} @var{variable} @key{RET} +Add each file name in each directory listed in @var{variable} +to the file name cache. @var{variable} should be a Lisp variable +such as @code{load-path} or @code{exec-path}, whose value is a list +of directory names. +@item M-x file-cache-clear-cache @key{RET} +Clear the cache; that is, remove all file names from it. +@end table + + The file name cache is not persistent: it is kept and maintained +only for the duration of the Emacs session. You can view the contents +of the cache with the @code{file-cache-display} command. + +@node File Conveniences +@section Convenience Features for Finding Files + + In this section, we introduce some convenient facilities for finding +recently-opened files, reading file names from a buffer, and viewing +image files. + +@findex recentf-mode +@vindex recentf-mode +@findex recentf-save-list +@findex recentf-edit-list + If you enable Recentf mode, with @kbd{M-x recentf-mode}, the +@samp{File} menu includes a submenu containing a list of recently +opened files. @kbd{M-x recentf-save-list} saves the current +@code{recent-file-list} to a file, and @kbd{M-x recentf-edit-list} +edits it. + + The @kbd{M-x ffap} command generalizes @code{find-file} with more +powerful heuristic defaults (@pxref{FFAP}), often based on the text at +point. Partial Completion mode offers other features extending +@code{find-file}, which can be used with @code{ffap}. +@xref{Completion Options}. + +@findex image-mode +@findex image-toggle-display +@cindex images, viewing + Visiting image files automatically selects Image mode. This major +mode allows you to toggle between displaying the file as an image in +the Emacs buffer, and displaying its underlying text representation, +using the command @kbd{C-c C-c} (@code{image-toggle-display}). This +works only when Emacs can display the specific image type. If the +displayed image is wider or taller than the frame, the usual point +motion keys (@kbd{C-f}, @kbd{C-p}, and so forth) cause different parts +of the image to be displayed. + +@findex thumbs-mode +@findex mode, thumbs + See also the Image-Dired package (@pxref{Image-Dired}) for viewing +images as thumbnails. + +@node Filesets +@section Filesets +@cindex filesets + +@findex filesets-init + If you regularly edit a certain group of files, you can define them +as a @dfn{fileset}. This lets you perform certain operations, such as +visiting, @code{query-replace}, and shell commands on all the files +at once. To make use of filesets, you must first add the expression +@code{(filesets-init)} to your @file{.emacs} file (@pxref{Init File}). +This adds a @samp{Filesets} menu to the menu bar. + +@findex filesets-add-buffer +@findex filesets-remove-buffer + The simplest way to define a fileset is by adding files to it one +at a time. To add a file to fileset @var{name}, visit the file and +type @kbd{M-x filesets-add-buffer @kbd{RET} @var{name} @kbd{RET}}. If +there is no fileset @var{name}, this creates a new one, which +initially creates only the current file. The command @kbd{M-x +filesets-remove-buffer} removes the current file from a fileset. + + You can also edit the list of filesets directly, with @kbd{M-x +filesets-edit} (or by choosing @samp{Edit Filesets} from the +@samp{Filesets} menu). The editing is performed in a Customize buffer +(@pxref{Easy Customization}). Filesets need not be a simple list of +files---you can also define filesets using regular expression matching +file names. Some examples of these more complicated filesets are +shown in the Customize buffer. Remember to select @samp{Save for +future sessions} if you want to use the same filesets in future Emacs +sessions. + + You can use the command @kbd{M-x filesets-open} to visit all the +files in a fileset, and @kbd{M-x filesets-close} to close them. Use +@kbd{M-x filesets-run-cmd} to run a shell command on all the files in +a fileset. These commands are also available from the @samp{Filesets} +menu, where each existing fileset is represented by a submenu. + +@ignore + arch-tag: 768d32cb-e15a-4cc1-b7bf-62c00ee12250 +@end ignore diff --git a/doc/emacs/fixit.texi b/doc/emacs/fixit.texi new file mode 100644 index 00000000000..d1577e2f528 --- /dev/null +++ b/doc/emacs/fixit.texi @@ -0,0 +1,471 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2001, 2002, +@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Fixit, Keyboard Macros, Search, Top +@chapter Commands for Fixing Typos +@cindex typos, fixing +@cindex mistakes, correcting + + In this chapter we describe the commands that are especially useful for +the times when you catch a mistake in your text just after you have made +it, or change your mind while composing text on the fly. + + The most fundamental command for correcting erroneous editing is the +undo command, @kbd{C-x u} or @kbd{C-_} or @kbd{C-/}. This command +undoes a single command (usually), a part of a command (in the case of +@code{query-replace}), or several consecutive self-inserting +characters. Consecutive repetitions of the undo command undo earlier +and earlier changes, back to the limit of the undo information +available. @xref{Undo}, for more information. + +@menu +* Undo:: The Undo commands. +* Kill Errors:: Commands to kill a batch of recently entered text. +* Transpose:: Exchanging two characters, words, lines, lists... +* Fixing Case:: Correcting case of last word entered. +* Spelling:: Apply spelling checker to a word, or a whole file. +@end menu + +@node Undo +@section Undo +@cindex undo +@cindex changes, undoing + + The @dfn{undo} commands undo recent changes in the buffer's text. +Each buffer records changes individually, and the undo command always +applies to the current buffer. You can undo all the changes in a +buffer for as far as back these records go. Usually each editing +command makes a separate entry in the undo records, but some commands +such as @code{query-replace} divide their changes into multiple +entries for flexibility in undoing. Meanwhile, self-inserting +characters are usually grouped to make undoing less tedious. + +@table @kbd +@item C-x u +@itemx C-_ +@itemx C-/ +Undo one entry in the current buffer's undo records (@code{undo}). +@end table + +@kindex C-x u +@kindex C-_ +@kindex C-/ +@findex undo + To begin to undo, type the command @kbd{C-x u} (or its aliases, +@kbd{C-_} or @kbd{C-/}). This undoes the most recent change in the +buffer, and moves point back to where it was before that change. + + Consecutive repetitions of @kbd{C-x u} (or its aliases) undo earlier +and earlier changes in the current buffer, back to the limit of the +current buffer's undo records. If all the recorded changes have +already been undone, the undo command just signals an error. + + If you notice that a buffer has been modified accidentally, the +easiest way to recover is to type @kbd{C-_} repeatedly until the stars +disappear from the front of the mode line. At this time, all the +modifications you made have been canceled. Whenever an undo command +makes the stars disappear from the mode line, it means that the buffer +contents are the same as they were when the file was last read in or +saved. + + If you do not remember whether you changed the buffer deliberately, +type @kbd{C-_} once. When you see the last change you made undone, you +will see whether it was an intentional change. If it was an accident, +leave it undone. If it was deliberate, redo the change as described +below. + +@findex undo-only + Any command other than an undo command breaks the sequence of undo +commands. Starting from that moment, the previous undo commands +become ordinary changes that you can undo. Thus, to redo changes you +have undone, type @kbd{C-f} or any other command that will harmlessly +break the sequence of undoing, then type undo commands again. On the +other hand, if you want to resume undoing, without redoing previous +undo commands, use @kbd{M-x undo-only}. This is like @code{undo}, but +will not redo changes you have just undone. + +@cindex selective undo +@kindex C-u C-x u + Ordinary undo applies to all changes made in the current buffer. You +can also perform @dfn{selective undo}, limited to the region. + + To do this, specify the region you want, then run the @code{undo} +command with a prefix argument (the value does not matter): @kbd{C-u +C-x u} or @kbd{C-u C-_}. This undoes the most recent change in the +region. To undo further changes in the same region, repeat the +@code{undo} command (no prefix argument is needed). In Transient Mark +mode (@pxref{Transient Mark}), any use of @code{undo} when there is an +active region performs selective undo; you do not need a prefix +argument. + + Some specialized buffers do not make undo records. Buffers +whose names start with spaces never do; these buffers are used +internally by Emacs and its extensions to hold text that users don't +normally look at or edit. + +@vindex undo-limit +@vindex undo-strong-limit +@vindex undo-outer-limit +@cindex undo limit + When the undo records for a buffer becomes too large, Emacs +discards the oldest undo records from time to time (during garbage +collection). You can specify how much undo records to keep by +setting three variables: @code{undo-limit}, @code{undo-strong-limit}, +and @code{undo-outer-limit}. Their values are expressed in units of +bytes of space. + + The variable @code{undo-limit} sets a soft limit: Emacs keeps undo +data for enough commands to reach this size, and perhaps exceed it, +but does not keep data for any earlier commands beyond that. Its +default value is 20000. The variable @code{undo-strong-limit} sets a +stricter limit: a previous command (not the most recent one) which +pushes the size past this amount is itself forgotten. The default +value of @code{undo-strong-limit} is 30000. + + Regardless of the values of those variables, the most recent change +is never discarded unless it gets bigger than @code{undo-outer-limit} +(normally 3,000,000). At that point, Emacs discards the undo data and +warns you about it. This is the only situation in which you cannot +undo the last command. If this happens, you can increase the value of +@code{undo-outer-limit} to make it even less likely to happen in the +future. But if you didn't expect the command to create such large +undo data, then it is probably a bug and you should report it. +@xref{Bugs,, Reporting Bugs}. + + The reason the @code{undo} command has three key bindings, @kbd{C-x +u}, @kbd{C-_} and @kbd{C-/}, is that it is worthy of a +single-character key, but @kbd{C-x u} is more straightforward for +beginners to remember and type. Meanwhile, @kbd{C--} on a text-only +terminal is really @kbd{C-_}, which makes it a natural and easily +typed binding for undoing. + +@node Kill Errors +@section Killing Your Mistakes + +@table @kbd +@item @key{DEL} +Delete last character (@code{delete-backward-char}). +@item M-@key{DEL} +Kill last word (@code{backward-kill-word}). +@item C-x @key{DEL} +Kill to beginning of sentence (@code{backward-kill-sentence}). +@end table + + The @key{DEL} character (@code{delete-backward-char}) is the most +important correction command. It deletes the character before point. +When @key{DEL} follows a self-inserting character command, you can think +of it as canceling that command. However, avoid the confusion of thinking +of @key{DEL} as a general way to cancel a command! + + When your mistake is longer than a couple of characters, it might be +more convenient to use @kbd{M-@key{DEL}} or @kbd{C-x @key{DEL}}. +@kbd{M-@key{DEL}} kills back to the start of the last word, and @kbd{C-x +@key{DEL}} kills back to the start of the last sentence. @kbd{C-x +@key{DEL}} is particularly useful when you change your mind about the +phrasing of the text you are writing. @kbd{M-@key{DEL}} and @kbd{C-x +@key{DEL}} save the killed text for @kbd{C-y} and @kbd{M-y} to +retrieve. @xref{Yanking}.@refill + + @kbd{M-@key{DEL}} is often useful even when you have typed only a few +characters wrong, if you know you are confused in your typing and aren't +sure exactly what you typed. At such a time, you cannot correct with +@key{DEL} except by looking at the screen to see what you did. Often it +requires less thought to kill the whole word and start again. + +@node Transpose +@section Transposing Text + +@table @kbd +@item C-t +Transpose two characters (@code{transpose-chars}). +@item M-t +Transpose two words (@code{transpose-words}). +@item C-M-t +Transpose two balanced expressions (@code{transpose-sexps}). +@item C-x C-t +Transpose two lines (@code{transpose-lines}). +@end table + +@kindex C-t +@findex transpose-chars + The common error of transposing two characters can be fixed, when they +are adjacent, with the @kbd{C-t} command (@code{transpose-chars}). Normally, +@kbd{C-t} transposes the two characters on either side of point. When +given at the end of a line, rather than transposing the last character of +the line with the newline, which would be useless, @kbd{C-t} transposes the +last two characters on the line. So, if you catch your transposition error +right away, you can fix it with just a @kbd{C-t}. If you don't catch it so +fast, you must move the cursor back between the two transposed +characters before you type @kbd{C-t}. If you transposed a space with +the last character of the word before it, the word motion commands are +a good way of getting there. Otherwise, a reverse search (@kbd{C-r}) +is often the best way. @xref{Search}. + +@kindex C-x C-t +@findex transpose-lines +@kindex M-t +@findex transpose-words +@c Don't index C-M-t and transpose-sexps here, they are indexed in +@c programs.texi, in the "List Commands" node. +@c @kindex C-M-t +@c @findex transpose-sexps + @kbd{M-t} transposes the word before point with the word after point +(@code{transpose-words}). It moves point forward over a word, +dragging the word preceding or containing point forward as well. The +punctuation characters between the words do not move. For example, +@w{@samp{FOO, BAR}} transposes into @w{@samp{BAR, FOO}} rather than +@samp{@w{BAR FOO,}}. + + @kbd{C-M-t} (@code{transpose-sexps}) is a similar command for +transposing two expressions (@pxref{Expressions}), and @kbd{C-x C-t} +(@code{transpose-lines}) exchanges lines. They work like @kbd{M-t} +except as regards what units of text they transpose. + + A numeric argument to a transpose command serves as a repeat count: it +tells the transpose command to move the character (word, expression, line) +before or containing point across several other characters (words, +expressions, lines). For example, @kbd{C-u 3 C-t} moves the character before +point forward across three other characters. It would change +@samp{f@point{}oobar} into @samp{oobf@point{}ar}. This is equivalent to +repeating @kbd{C-t} three times. @kbd{C-u - 4 M-t} moves the word +before point backward across four words. @kbd{C-u - C-M-t} would cancel +the effect of plain @kbd{C-M-t}.@refill + + A numeric argument of zero is assigned a special meaning (because +otherwise a command with a repeat count of zero would do nothing): to +transpose the character (word, expression, line) ending after point +with the one ending after the mark. + +@node Fixing Case +@section Case Conversion + +@table @kbd +@item M-- M-l +Convert last word to lower case. Note @kbd{Meta--} is Meta-minus. +@item M-- M-u +Convert last word to all upper case. +@item M-- M-c +Convert last word to lower case with capital initial. +@end table + +@kindex M-@t{-} M-l +@kindex M-@t{-} M-u +@kindex M-@t{-} M-c + A very common error is to type words in the wrong case. Because of this, +the word case-conversion commands @kbd{M-l}, @kbd{M-u} and @kbd{M-c} have a +special feature when used with a negative argument: they do not move the +cursor. As soon as you see you have mistyped the last word, you can simply +case-convert it and go on typing. @xref{Case}.@refill + +@node Spelling +@section Checking and Correcting Spelling +@cindex spelling, checking and correcting +@cindex checking spelling +@cindex correcting spelling + + This section describes the commands to check the spelling of a single +word or of a portion of a buffer. These commands work with the spelling +checker programs Aspell and Ispell, which are not part of Emacs. +@ifnottex +@xref{Top, Aspell,, aspell, The Aspell Manual}. +@end ifnottex + +@table @kbd +@item M-x flyspell-mode +Enable Flyspell mode, which highlights all misspelled words. +@item M-x flyspell-prog-mode +Enable Flyspell mode for comments and strings only. +@item M-$ +Check and correct spelling of the word at point (@code{ispell-word}). +@item M-@key{TAB} +@itemx @key{ESC} @key{TAB} +Complete the word before point based on the spelling dictionary +(@code{ispell-complete-word}). +@item M-x ispell +Spell-check the active region or the current buffer. +@item M-x ispell-buffer +Check and correct spelling of each word in the buffer. +@item M-x ispell-region +Check and correct spelling of each word in the region. +@item M-x ispell-message +Check and correct spelling of each word in a draft mail message, +excluding cited material. +@item M-x ispell-change-dictionary @key{RET} @var{dict} @key{RET} +Restart the Aspell or Ispell process, using @var{dict} as the dictionary. +@item M-x ispell-kill-ispell +Kill the Aspell or Ispell subprocess. +@end table + +@cindex Flyspell mode +@findex flyspell-mode + Flyspell mode is a fully-automatic way to check spelling as you edit +in Emacs. It operates by checking words as you change or insert them. +When it finds a word that it does not recognize, it highlights that +word. This does not interfere with your editing, but when you see the +highlighted word, you can move to it and fix it. Type @kbd{M-x +flyspell-mode} to enable or disable this mode in the current buffer. + + When Flyspell mode highlights a word as misspelled, you can click on +it with @kbd{Mouse-2} to display a menu of possible corrections and +actions. You can also correct the word by editing it manually in any +way you like. + +@findex flyspell-prog-mode +Flyspell Prog mode works just like ordinary Flyspell mode, except that +it only checks words in comments and string constants. This feature +is useful for editing programs. Type @kbd{M-x flyspell-prog-mode} to +enable or disable this mode in the current buffer. + + The other Emacs spell-checking features check or look up words when +you give an explicit command to do so. + +@kindex M-$ +@findex ispell-word + To check the spelling of the word around or before point, and +optionally correct it as well, use the command @kbd{M-$} +(@code{ispell-word}). If the word is not correct, the command offers +you various alternatives for what to do about it. + +@findex ispell-buffer +@findex ispell-region + To check the entire current buffer, use @kbd{M-x ispell-buffer}. Use +@kbd{M-x ispell-region} to check just the current region. To check +spelling in an email message you are writing, use @kbd{M-x +ispell-message}; that command checks the whole buffer, except for +material that is indented or appears to be cited from other messages. + +@findex ispell +@cindex spell-checking the active region + The @kbd{M-x ispell} command spell-checks the active region if the +Transient Mark mode is on (@pxref{Transient Mark}), otherwise it +spell-checks the current buffer. + + Each time these commands encounter an incorrect word, they ask you +what to do. They display a list of alternatives, usually including +several ``near-misses''---words that are close to the word being +checked. Then you must type a single-character response. Here are +the valid responses: + +@table @kbd +@item @key{SPC} +Skip this word---continue to consider it incorrect, but don't change it +here. + +@item r @var{new} @key{RET} +Replace the word (just this time) with @var{new}. (The replacement +string will be rescanned for more spelling errors.) + +@item R @var{new} @key{RET} +Replace the word with @var{new}, and do a @code{query-replace} so you +can replace it elsewhere in the buffer if you wish. (The replacements +will be rescanned for more spelling errors.) + +@item @var{digit} +Replace the word (just this time) with one of the displayed +near-misses. Each near-miss is listed with a digit; type that digit to +select it. + +@item a +Accept the incorrect word---treat it as correct, but only in this +editing session. + +@item A +Accept the incorrect word---treat it as correct, but only in this +editing session and for this buffer. + +@item i +Insert this word in your private dictionary file so that Aspell or Ispell will +consider it correct from now on, even in future sessions. + +@item u +Insert the lower-case version of this word in your private dic@-tion@-ary +file. + +@item m +Like @kbd{i}, but you can also specify dictionary completion +information. + +@item l @var{word} @key{RET} +Look in the dictionary for words that match @var{word}. These words +become the new list of ``near-misses''; you can select one of them as +the replacement by typing a digit. You can use @samp{*} in @var{word} as a +wildcard. + +@item C-g +Quit interactive spell checking, leaving point at the word that was +being checked. You can restart checking again afterward with @kbd{C-u +M-$}. + +@item X +Same as @kbd{C-g}. + +@item x +Quit interactive spell checking and move point back to where it was +when you started spell checking. + +@item q +Quit interactive spell checking and kill the Ispell subprocess. + +@item C-l +Refresh the screen. + +@item C-z +This key has its normal command meaning (suspend Emacs or iconify this +frame). + +@item ? +Show the list of options. +@end table + +@findex ispell-complete-word + The command @code{ispell-complete-word}, which is bound to the key +@kbd{M-@key{TAB}} in Text mode and related modes, shows a list of +completions based on spelling correction. Insert the beginning of a +word, and then type @kbd{M-@key{TAB}}; the command displays a +completion list window. (If your window manager intercepts +@kbd{M-@key{TAB}}, type @kbd{@key{ESC} @key{TAB}} or @kbd{C-M-i}.) To +choose one of the completions listed, click @kbd{Mouse-2} or +@kbd{Mouse-1} fast on it, or move the cursor there in the completions +window and type @key{RET}. @xref{Text Mode}. + +@ignore +@findex reload-ispell + The first time you use any of the spell checking commands, it starts +an Ispell subprocess. The first thing the subprocess does is read your +private dictionary, which defaults to the file @file{~/ispell.words}. +Words that you ``insert'' with the @kbd{i} command are added to that +file, but not right away---only at the end of the interactive +replacement procedure. Use the @kbd{M-x reload-ispell} command to +reload your private dictionary if you edit the file outside of Ispell. +@end ignore + +@cindex @code{ispell} program +@findex ispell-kill-ispell + Once started, the Aspell or Ispell subprocess continues to run +(waiting for something to do), so that subsequent spell checking +commands complete more quickly. If you want to get rid of the +process, use @kbd{M-x ispell-kill-ispell}. This is not usually +necessary, since the process uses no time except when you do spelling +correction. + +@vindex ispell-dictionary + Ispell and Aspell use two dictionaries together for spell checking: the +standard dictionary and your private dictionary. The variable +@code{ispell-dictionary} specifies the file name to use for the +standard dictionary; a value of @code{nil} selects the default +dictionary. The command @kbd{M-x ispell-change-dictionary} sets this +variable and then restarts the subprocess, so that it will use +a different standard dictionary. + +@vindex ispell-complete-word-dict + Aspell and Ispell use a separate dictionary for word completion. +The variable @code{ispell-complete-word-dict} specifies the file name +of this dictionary. The completion dictionary must be different +because it cannot use root and affix information. For some languages +there is a spell checking dictionary but no word completion +dictionary. + +@ignore + arch-tag: 3359a443-96ed-448f-9f05-c8111ba8eac0 +@end ignore diff --git a/doc/emacs/fortran-xtra.texi b/doc/emacs/fortran-xtra.texi new file mode 100644 index 00000000000..9249f5f006c --- /dev/null +++ b/doc/emacs/fortran-xtra.texi @@ -0,0 +1,548 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@c +@c This file is included either in emacs-xtra.texi (when producing the +@c printed version) or in the main Emacs manual (for the on-line version). +@node Fortran +@section Fortran Mode +@cindex Fortran mode +@cindex mode, Fortran + + Fortran mode provides special motion commands for Fortran statements +and subprograms, and indentation commands that understand Fortran +conventions of nesting, line numbers and continuation statements. +Fortran mode has support for Auto Fill mode that breaks long lines into +proper Fortran continuation lines. + + Special commands for comments are provided because Fortran comments +are unlike those of other languages. Built-in abbrevs optionally save +typing when you insert Fortran keywords. + + Use @kbd{M-x fortran-mode} to switch to this major mode. This +command runs the hook @code{fortran-mode-hook}. +@iftex +@xref{Hooks,,, emacs, the Emacs Manual}. +@end iftex +@ifnottex +@xref{Hooks}. +@end ifnottex + +@cindex Fortran77 and Fortran90 +@findex f90-mode +@findex fortran-mode + Fortran mode is meant for editing Fortran77 ``fixed format'' (and also +``tab format'') source code. For editing the modern Fortran90 or +Fortran95 ``free format'' source code, use F90 mode (@code{f90-mode}). +Emacs normally uses Fortran mode for files with extension @samp{.f}, +@samp{.F} or @samp{.for}, and F90 mode for the extension @samp{.f90} and +@samp{.f95}. GNU Fortran supports both kinds of format. + +@menu +* Motion: Fortran Motion. Moving point by statements or subprograms. +* Indent: Fortran Indent. Indentation commands for Fortran. +* Comments: Fortran Comments. Inserting and aligning comments. +* Autofill: Fortran Autofill. Auto fill support for Fortran. +* Columns: Fortran Columns. Measuring columns for valid Fortran. +* Abbrev: Fortran Abbrev. Built-in abbrevs for Fortran keywords. +@end menu + +@node Fortran Motion +@subsection Motion Commands + + In addition to the normal commands for moving by and operating on +``defuns'' (Fortran subprograms---functions and subroutines, as well as +modules for F90 mode), Fortran mode provides special commands to move by +statements and other program units. + +@table @kbd +@kindex C-c C-n @r{(Fortran mode)} +@findex fortran-next-statement +@findex f90-next-statement +@item C-c C-n +Move to the beginning of the next statement +(@code{fortran-next-statement}/@code{f90-next-statement}). + +@kindex C-c C-p @r{(Fortran mode)} +@findex fortran-previous-statement +@findex f90-previous-statement +@item C-c C-p +Move to the beginning of the previous statement +(@code{fortran-previous-statement}/@code{f90-previous-statement}). +If there is no previous statement (i.e. if called from the first +statement in the buffer), move to the start of the buffer. + +@kindex C-c C-e @r{(F90 mode)} +@findex f90-next-block +@item C-c C-e +Move point forward to the start of the next code block +(@code{f90-next-block}). A code block is a subroutine, +@code{if}--@code{endif} statement, and so forth. This command exists +for F90 mode only, not Fortran mode. With a numeric argument, this +moves forward that many blocks. + +@kindex C-c C-a @r{(F90 mode)} +@findex f90-previous-block +@item C-c C-a +Move point backward to the previous code block +(@code{f90-previous-block}). This is like @code{f90-next-block}, but +moves backwards. + +@kindex C-M-n @r{(Fortran mode)} +@findex fortran-end-of-block +@findex f90-end-of-block +@item C-M-n +Move to the end of the current code block +(@code{fortran-end-of-block}/@code{f90-end-of-block}). With a numeric +argument, move forward that number of blocks. The mark is set before +moving point. The F90 mode version of this command checks for +consistency of block types and labels (if present), but it does not +check the outermost block since that may be incomplete. + +@kindex C-M-p @r{(Fortran mode)} +@findex fortran-beginning-of-block +@findex f90-beginning-of-block +@item C-M-p +Move to the start of the current code block +(@code{fortran-beginning-of-block}/@code{f90-beginning-of-block}). This +is like @code{fortran-end-of-block}, but moves backwards. +@end table + +@node Fortran Indent +@subsection Fortran Indentation + + Special commands and features are needed for indenting Fortran code in +order to make sure various syntactic entities (line numbers, comment line +indicators and continuation line flags) appear in the columns that are +required for standard, fixed (or tab) format Fortran. + +@menu +* Commands: ForIndent Commands. Commands for indenting and filling Fortran. +* Contline: ForIndent Cont. How continuation lines indent. +* Numbers: ForIndent Num. How line numbers auto-indent. +* Conv: ForIndent Conv. Conventions you must obey to avoid trouble. +* Vars: ForIndent Vars. Variables controlling Fortran indent style. +@end menu + +@node ForIndent Commands +@subsubsection Fortran Indentation and Filling Commands + +@table @kbd +@item C-M-j +Break the current line at point and set up a continuation line +(@code{fortran-split-line}). +@item M-^ +Join this line to the previous line (@code{fortran-join-line}). +@item C-M-q +Indent all the lines of the subprogram point is in +(@code{fortran-indent-subprogram}). +@item M-q +Fill a comment block or statement. +@end table + +@kindex C-M-q @r{(Fortran mode)} +@findex fortran-indent-subprogram + The key @kbd{C-M-q} runs @code{fortran-indent-subprogram}, a command +to reindent all the lines of the Fortran subprogram (function or +subroutine) containing point. + +@kindex C-M-j @r{(Fortran mode)} +@findex fortran-split-line + The key @kbd{C-M-j} runs @code{fortran-split-line}, which splits +a line in the appropriate fashion for Fortran. In a non-comment line, +the second half becomes a continuation line and is indented +accordingly. In a comment line, both halves become separate comment +lines. + +@kindex M-^ @r{(Fortran mode)} +@kindex C-c C-d @r{(Fortran mode)} +@findex fortran-join-line + @kbd{M-^} or @kbd{C-c C-d} runs the command @code{fortran-join-line}, +which joins a continuation line back to the previous line, roughly as +the inverse of @code{fortran-split-line}. The point must be on a +continuation line when this command is invoked. + +@kindex M-q @r{(Fortran mode)} +@kbd{M-q} in Fortran mode fills the comment block or statement that +point is in. This removes any excess statement continuations. + +@node ForIndent Cont +@subsubsection Continuation Lines +@cindex Fortran continuation lines + +@vindex fortran-continuation-string + Most Fortran77 compilers allow two ways of writing continuation lines. +If the first non-space character on a line is in column 5, then that +line is a continuation of the previous line. We call this @dfn{fixed +format}. (In GNU Emacs we always count columns from 0; but note that +the Fortran standard counts from 1.) The variable +@code{fortran-continuation-string} specifies what character to put in +column 5. A line that starts with a tab character followed by any digit +except @samp{0} is also a continuation line. We call this style of +continuation @dfn{tab format}. (Fortran90 introduced ``free format,'' +with another style of continuation lines). + +@vindex indent-tabs-mode @r{(Fortran mode)} +@vindex fortran-analyze-depth +@vindex fortran-tab-mode-default + Fortran mode can use either style of continuation line. When you +enter Fortran mode, it tries to deduce the proper continuation style +automatically from the buffer contents. It does this by scanning up to +@code{fortran-analyze-depth} (default 100) lines from the start of the +buffer. The first line that begins with either a tab character or six +spaces determines the choice. If the scan fails (for example, if the +buffer is new and therefore empty), the value of +@code{fortran-tab-mode-default} (@code{nil} for fixed format, and +non-@code{nil} for tab format) is used. @samp{/t} in the mode line +indicates tab format is selected. Fortran mode sets the value of +@code{indent-tabs-mode} accordingly. + + If the text on a line starts with the Fortran continuation marker +@samp{$}, or if it begins with any non-whitespace character in column +5, Fortran mode treats it as a continuation line. When you indent a +continuation line with @key{TAB}, it converts the line to the current +continuation style. When you split a Fortran statement with +@kbd{C-M-j}, the continuation marker on the newline is created according +to the continuation style. + + The setting of continuation style affects several other aspects of +editing in Fortran mode. In fixed format mode, the minimum column +number for the body of a statement is 6. Lines inside of Fortran +blocks that are indented to larger column numbers always use only the +space character for whitespace. In tab format mode, the minimum +column number for the statement body is 8, and the whitespace before +column 8 must always consist of one tab character. + +@node ForIndent Num +@subsubsection Line Numbers + + If a number is the first non-whitespace in the line, Fortran +indentation assumes it is a line number and moves it to columns 0 +through 4. (Columns always count from 0 in GNU Emacs.) + +@vindex fortran-line-number-indent + Line numbers of four digits or less are normally indented one space. +The variable @code{fortran-line-number-indent} controls this; it +specifies the maximum indentation a line number can have. The default +value of the variable is 1. Fortran mode tries to prevent line number +digits passing column 4, reducing the indentation below the specified +maximum if necessary. If @code{fortran-line-number-indent} has the +value 5, line numbers are right-justified to end in column 4. + +@vindex fortran-electric-line-number + Simply inserting a line number is enough to indent it according to +these rules. As each digit is inserted, the indentation is recomputed. +To turn off this feature, set the variable +@code{fortran-electric-line-number} to @code{nil}. + + +@node ForIndent Conv +@subsubsection Syntactic Conventions + + Fortran mode assumes that you follow certain conventions that simplify +the task of understanding a Fortran program well enough to indent it +properly: + +@itemize @bullet +@item +Two nested @samp{do} loops never share a @samp{continue} statement. + +@item +Fortran keywords such as @samp{if}, @samp{else}, @samp{then}, @samp{do} +and others are written without embedded whitespace or line breaks. + +Fortran compilers generally ignore whitespace outside of string +constants, but Fortran mode does not recognize these keywords if they +are not contiguous. Constructs such as @samp{else if} or @samp{end do} +are acceptable, but the second word should be on the same line as the +first and not on a continuation line. +@end itemize + +@noindent +If you fail to follow these conventions, the indentation commands may +indent some lines unaesthetically. However, a correct Fortran program +retains its meaning when reindented even if the conventions are not +followed. + +@node ForIndent Vars +@subsubsection Variables for Fortran Indentation + +@vindex fortran-do-indent +@vindex fortran-if-indent +@vindex fortran-structure-indent +@vindex fortran-continuation-indent +@vindex fortran-check-all-num@dots{} +@vindex fortran-minimum-statement-indent@dots{} + Several additional variables control how Fortran indentation works: + +@table @code +@item fortran-do-indent +Extra indentation within each level of @samp{do} statement (default 3). + +@item fortran-if-indent +Extra indentation within each level of @samp{if}, @samp{select case}, or +@samp{where} statements (default 3). + +@item fortran-structure-indent +Extra indentation within each level of @samp{structure}, @samp{union}, +@samp{map}, or @samp{interface} statements (default 3). + +@item fortran-continuation-indent +Extra indentation for bodies of continuation lines (default 5). + +@item fortran-check-all-num-for-matching-do +In Fortran77, a numbered @samp{do} statement is ended by any statement +with a matching line number. It is common (but not compulsory) to use a +@samp{continue} statement for this purpose. If this variable has a +non-@code{nil} value, indenting any numbered statement must check for a +@samp{do} that ends there. If you always end @samp{do} statements with +a @samp{continue} line (or if you use the more modern @samp{enddo}), +then you can speed up indentation by setting this variable to +@code{nil}. The default is @code{nil}. + +@item fortran-blink-matching-if +If this is @code{t}, indenting an @samp{endif} (or @samp{enddo} +statement moves the cursor momentarily to the matching @samp{if} (or +@samp{do}) statement to show where it is. The default is @code{nil}. + +@item fortran-minimum-statement-indent-fixed +Minimum indentation for Fortran statements when using fixed format +continuation line style. Statement bodies are never indented less than +this much. The default is 6. + +@item fortran-minimum-statement-indent-tab +Minimum indentation for Fortran statements for tab format continuation line +style. Statement bodies are never indented less than this much. The +default is 8. +@end table + +The variables controlling the indentation of comments are described in +the following section. + +@node Fortran Comments +@subsection Fortran Comments + + The usual Emacs comment commands assume that a comment can follow a +line of code. In Fortran77, the standard comment syntax requires an +entire line to be just a comment. Therefore, Fortran mode replaces the +standard Emacs comment commands and defines some new variables. + +@vindex fortran-comment-line-start + Fortran mode can also handle the Fortran90 comment syntax where comments +start with @samp{!} and can follow other text. Because only some Fortran77 +compilers accept this syntax, Fortran mode will not insert such comments +unless you have said in advance to do so. To do this, set the variable +@code{fortran-comment-line-start} to @samp{"!"}. + +@table @kbd +@item M-; +Align comment or insert new comment (@code{fortran-indent-comment}). + +@item C-x ; +Applies to nonstandard @samp{!} comments only. + +@item C-c ; +Turn all lines of the region into comments, or (with argument) turn them back +into real code (@code{fortran-comment-region}). +@end table + +@findex fortran-indent-comment + @kbd{M-;} in Fortran mode is redefined as the command +@code{fortran-indent-comment}. Like the usual @kbd{M-;} command, this +recognizes any kind of existing comment and aligns its text appropriately; +if there is no existing comment, a comment is inserted and aligned. But +inserting and aligning comments are not the same in Fortran mode as in +other modes. + + When a new comment must be inserted, if the current line is blank, a +full-line comment is inserted. On a non-blank line, a nonstandard @samp{!} +comment is inserted if you have said you want to use them. Otherwise a +full-line comment is inserted on a new line before the current line. + + Nonstandard @samp{!} comments are aligned like comments in other +languages, but full-line comments are different. In a standard full-line +comment, the comment delimiter itself must always appear in column zero. +What can be aligned is the text within the comment. You can choose from +three styles of alignment by setting the variable +@code{fortran-comment-indent-style} to one of these values: + +@vindex fortran-comment-indent-style +@vindex fortran-comment-line-extra-indent +@table @code +@item fixed +Align the text at a fixed column, which is the sum of +@code{fortran-comment-line-extra-indent} and the minimum statement +indentation. This is the default. + +The minimum statement indentation is +@code{fortran-minimum-statement-indent-fixed} for fixed format +continuation line style and @code{fortran-minimum-statement-indent-tab} +for tab format style. + +@item relative +Align the text as if it were a line of code, but with an additional +@code{fortran-comment-line-extra-indent} columns of indentation. + +@item nil +Don't move text in full-line comments automatically. +@end table + +@vindex fortran-comment-indent-char + In addition, you can specify the character to be used to indent within +full-line comments by setting the variable +@code{fortran-comment-indent-char} to the single-character string you want +to use. + +@vindex fortran-directive-re + Compiler directive lines, or preprocessor lines, have much the same +appearance as comment lines. It is important, though, that such lines +never be indented at all, no matter what the value of +@code{fortran-comment-indent-style}. The variable +@code{fortran-directive-re} is a regular expression that specifies which +lines are directives. Matching lines are never indented, and receive +distinctive font-locking. + + The normal Emacs comment command @kbd{C-x ;} has not been redefined. If +you use @samp{!} comments, this command can be used with them. Otherwise +it is useless in Fortran mode. + +@kindex C-c ; @r{(Fortran mode)} +@findex fortran-comment-region +@vindex fortran-comment-region + The command @kbd{C-c ;} (@code{fortran-comment-region}) turns all the +lines of the region into comments by inserting the string @samp{C$$$} at +the front of each one. With a numeric argument, it turns the region +back into live code by deleting @samp{C$$$} from the front of each line +in it. The string used for these comments can be controlled by setting +the variable @code{fortran-comment-region}. Note that here we have an +example of a command and a variable with the same name; these two uses +of the name never conflict because in Lisp and in Emacs it is always +clear from the context which one is meant. + +@node Fortran Autofill +@subsection Auto Fill in Fortran Mode + + Fortran mode has specialized support for Auto Fill mode, which is a +minor mode that automatically splits statements as you insert them +when they become too wide. Splitting a statement involves making +continuation lines using @code{fortran-continuation-string} +(@pxref{ForIndent Cont}). This splitting happens when you type +@key{SPC}, @key{RET}, or @key{TAB}, and also in the Fortran +indentation commands. You activate Auto Fill in Fortran mode in the +normal way. +@iftex +@xref{Auto Fill,,, emacs, the Emacs Manual}. +@end iftex +@ifnottex +@xref{Auto Fill}. +@end ifnottex + +@vindex fortran-break-before-delimiters + Auto Fill breaks lines at spaces or delimiters when the lines get +longer than the desired width (the value of @code{fill-column}). The +delimiters (besides whitespace) that Auto Fill can break at are +@samp{+}, @samp{-}, @samp{/}, @samp{*}, @samp{=}, @samp{<}, @samp{>}, +and @samp{,}. The line break comes after the delimiter if the +variable @code{fortran-break-before-delimiters} is @code{nil}. +Otherwise (and by default), the break comes before the delimiter. + + To enable Auto Fill in all Fortran buffers, add +@code{turn-on-auto-fill} to @code{fortran-mode-hook}. +@iftex +@xref{Hooks,,, emacs, the Emacs Manual}. +@end iftex +@ifnottex +@xref{Hooks}. +@end ifnottex + +@node Fortran Columns +@subsection Checking Columns in Fortran + +@table @kbd +@item C-c C-r +Display a ``column ruler'' momentarily above the current line +(@code{fortran-column-ruler}). +@item C-c C-w +Split the current window horizontally temporarily so that it is 72 +columns wide (@code{fortran-window-create-momentarily}). This may +help you avoid making lines longer than the 72-character limit that +some Fortran compilers impose. +@item C-u C-c C-w +Split the current window horizontally so that it is 72 columns wide +(@code{fortran-window-create}). You can then continue editing. +@item M-x fortran-strip-sequence-nos +Delete all text in column 72 and beyond. +@end table + +@kindex C-c C-r @r{(Fortran mode)} +@findex fortran-column-ruler + The command @kbd{C-c C-r} (@code{fortran-column-ruler}) shows a column +ruler momentarily above the current line. The comment ruler is two lines +of text that show you the locations of columns with special significance in +Fortran programs. Square brackets show the limits of the columns for line +numbers, and curly brackets show the limits of the columns for the +statement body. Column numbers appear above them. + + Note that the column numbers count from zero, as always in GNU Emacs. +As a result, the numbers may be one less than those you are familiar +with; but the positions they indicate in the line are standard for +Fortran. + +@vindex fortran-column-ruler-fixed +@vindex fortran-column-ruler-tabs + The text used to display the column ruler depends on the value of the +variable @code{indent-tabs-mode}. If @code{indent-tabs-mode} is +@code{nil}, then the value of the variable +@code{fortran-column-ruler-fixed} is used as the column ruler. +Otherwise, the value of the variable @code{fortran-column-ruler-tab} is +displayed. By changing these variables, you can change the column ruler +display. + +@kindex C-c C-w @r{(Fortran mode)} +@findex fortran-window-create-momentarily + @kbd{C-c C-w} (@code{fortran-window-create-momentarily}) temporarily +splits the current window horizontally, making a window 72 columns +wide, so you can see any lines that are too long. Type a space to +restore the normal width. + +@kindex C-u C-c C-w @r{(Fortran mode)} +@findex fortran-window-create + You can also split the window horizontally and continue editing with +the split in place. To do this, use @kbd{C-u C-c C-w} (@code{M-x +fortran-window-create}). By editing in this window you can +immediately see when you make a line too wide to be correct Fortran. + +@findex fortran-strip-sequence-nos + The command @kbd{M-x fortran-strip-sequence-nos} deletes all text in +column 72 and beyond, on all lines in the current buffer. This is the +easiest way to get rid of old sequence numbers. + +@node Fortran Abbrev +@subsection Fortran Keyword Abbrevs + + Fortran mode provides many built-in abbrevs for common keywords and +declarations. These are the same sort of abbrev that you can define +yourself. To use them, you must turn on Abbrev mode. +@iftex +@xref{Abbrevs,,, emacs, the Emacs Manual}. +@end iftex +@ifnottex +@xref{Abbrevs}. +@end ifnottex + + The built-in abbrevs are unusual in one way: they all start with a +semicolon. You cannot normally use semicolon in an abbrev, but Fortran +mode makes this possible by changing the syntax of semicolon to ``word +constituent.'' + + For example, one built-in Fortran abbrev is @samp{;c} for +@samp{continue}. If you insert @samp{;c} and then insert a punctuation +character such as a space or a newline, the @samp{;c} expands automatically +to @samp{continue}, provided Abbrev mode is enabled.@refill + + Type @samp{;?} or @samp{;C-h} to display a list of all the built-in +Fortran abbrevs and what they stand for. + +@ignore + arch-tag: 23ed7c36-1517-4646-9235-2d5ade5f06f6 +@end ignore diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi new file mode 100644 index 00000000000..a45b582b455 --- /dev/null +++ b/doc/emacs/frames.texi @@ -0,0 +1,1113 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1999, 2000, +@c 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Frames, International, Windows, Top +@chapter Frames and Graphical Displays +@cindex frames + + When using a graphical display, you can create multiple windows at +the system in a single Emacs session. Each system-level window that +belongs to Emacs displays a @dfn{frame} which can contain one or +several Emacs windows. A frame initially contains a single +general-purpose Emacs window which you can subdivide vertically or +horizontally into smaller windows. A frame normally contains its own +echo area and minibuffer, but you can make frames that don't have +these---they use the echo area and minibuffer of another frame. + + To avoid confusion, we reserve the word ``window'' for the +subdivisions that Emacs implements, and never use it to refer to a +frame. + + Editing you do in one frame affects the other frames. For +instance, if you put text in the kill ring in one frame, you can yank it +in another frame. If you exit Emacs through @kbd{C-x C-c} in one frame, +it terminates all the frames. To delete just one frame, use @kbd{C-x 5 +0} (that is zero, not @kbd{o}). + + Emacs compiled for MS-DOS emulates some windowing functionality, +so that you can use many of the features described in this chapter. +@iftex +@xref{MS-DOS Mouse,,,emacs-xtra,Specialized Emacs Features}. +@end iftex +@ifnottex +@xref{MS-DOS Mouse}. +@end ifnottex + +@menu +* Cut and Paste:: Mouse commands for cut and paste. +* Mouse References:: Using the mouse to select an item from a list. +* Menu Mouse Clicks:: Mouse clicks that bring up menus. +* Mode Line Mouse:: Mouse clicks on the mode line. +* Creating Frames:: Creating additional Emacs frames with various contents. +* Frame Commands:: Iconifying, deleting, and switching frames. +* Speedbar:: How to make and use a speedbar frame. +* Multiple Displays:: How one Emacs job can talk to several displays. +* Special Buffer Frames:: You can make certain buffers have their own frames. +* Frame Parameters:: Changing the colors and other modes of frames. +* Scroll Bars:: How to enable and disable scroll bars; how to use them. +* Wheeled Mice:: Using mouse wheels for scrolling. +* Drag and Drop:: Using drag and drop to open files and insert text. +* Menu Bars:: Enabling and disabling the menu bar. +* Tool Bars:: Enabling and disabling the tool bar. +* Dialog Boxes:: Controlling use of dialog boxes. +* Tooltips:: Displaying information at the current mouse position. +* Mouse Avoidance:: Moving the mouse pointer out of the way. +* Non-Window Terminals:: Multiple frames on terminals that show only one. +* Text-Only Mouse:: Using the mouse in text-only terminals. +@end menu + +@node Cut and Paste +@section Killing and Yanking on Graphical Displays + + This section describes facilities for selecting a region, killing, +and yanking using the mouse. + +@menu +* Mouse Commands:: Moving, cutting, and pasting, with the mouse. +* Cut/Paste Other App:: Transfering text between Emacs and other apps. +* Word and Line Mouse:: Mouse commands for selecting whole words or lines. +* Secondary Selection:: Cutting without altering point and mark. +* Clipboard:: Using the clipboard for selections. +@end menu + +@node Mouse Commands +@subsection Mouse Commands for Editing +@cindex mouse buttons (what they do) + + The mouse commands for selecting and copying a region are mostly +compatible with the @code{xterm} program. You can use the same mouse +commands for copying between Emacs and other window-based programs. +Most of these commands also work in Emacs when you run it under an +@code{xterm} terminal. + +@kindex DELETE @r{(and mouse selection)} + If you select a region with any of these mouse commands, and then +immediately afterward type the @key{DELETE} function key, it deletes the +region that you selected. The @key{BACKSPACE} function key and the +@acronym{ASCII} character @key{DEL} do not do this; if you type any other key +in between the mouse command and @key{DELETE}, it does not do this. + +@findex mouse-set-region +@findex mouse-set-point +@findex mouse-yank-at-click +@findex mouse-save-then-click +@kindex Mouse-1 +@kindex Mouse-2 +@kindex Mouse-3 +@table @kbd +@item Mouse-1 +Move point to where you click (@code{mouse-set-point}). +This is normally the left button. + +@vindex x-mouse-click-focus-ignore-position +Normally, Emacs does not distinguish between ordinary mouse clicks and +clicks that select a frame. When you click on a frame to select it, +that also changes the selected window and cursor position according to +the mouse click position. On the X window system, you can change this +behavior by setting the variable +@code{x-mouse-click-focus-ignore-position} to @code{t}. Then the +first click selects the frame, but does not affect the selected window +or cursor position. If you click again in the same place, since that +click will be in the selected frame, it will change the window or +cursor position. + +@item Drag-Mouse-1 +Set the region to the text you select by dragging, and copy it to the +kill ring (@code{mouse-set-region}). You can specify both ends of the +region with this single command. + +@vindex mouse-scroll-min-lines +If you move the mouse off the top or bottom of the window while +dragging, the window scrolls at a steady rate until you move the mouse +back into the window. This way, you can select regions that don't fit +entirely on the screen. The number of lines scrolled per step depends +on how far away from the window edge the mouse has gone; the variable +@code{mouse-scroll-min-lines} specifies a minimum step size. + +@vindex mouse-drag-copy-region +If the variable @code{mouse-drag-copy-region} is @code{nil}, this +mouse command does not copy the selected region into the kill ring. + +@item Mouse-2 +Yank the last killed text, where you click (@code{mouse-yank-at-click}). +This is normally the middle button. + +@item Mouse-3 +This command, @code{mouse-save-then-kill}, has several functions +depending on where you click and the status of the region. + +The most basic case is when you click @kbd{Mouse-1} in one place and +then @kbd{Mouse-3} in another. This selects the text between those two +positions as the region. It also copies the new region to the kill +ring, so that you can copy it to someplace else. + +If you click @kbd{Mouse-1} in the text, scroll with the scroll bar, and +then click @kbd{Mouse-3}, it remembers where point was before scrolling +(where you put it with @kbd{Mouse-1}), and uses that position as the +other end of the region. This is so that you can select a region that +doesn't fit entirely on the screen. + +More generally, if you do not have a highlighted region, @kbd{Mouse-3} +selects the text between point and the click position as the region. It +does this by setting the mark where point was, and moving point to where +you click. + +If you have a highlighted region, or if the region was set just before +by dragging button 1, @kbd{Mouse-3} adjusts the nearer end of the region +by moving it to where you click. The adjusted region's text also +replaces the old region's text in the kill ring. + +If you originally specified the region using a double or triple +@kbd{Mouse-1}, so that the region is defined to consist of entire words +or lines, then adjusting the region with @kbd{Mouse-3} also proceeds by +entire words or lines. + +If you use @kbd{Mouse-3} a second time consecutively, at the same place, +that kills the region already selected. +@end table + + The simplest way to kill text with the mouse is to press @kbd{Mouse-1} +at one end, then press @kbd{Mouse-3} twice at the other end. +@xref{Killing}. To copy the text into the kill ring without deleting it +from the buffer, press @kbd{Mouse-3} just once---or just drag across the +text with @kbd{Mouse-1}. Then you can copy it elsewhere by yanking it. + +@vindex mouse-yank-at-point + To yank the killed or copied text somewhere else, move the mouse there +and press @kbd{Mouse-2}. @xref{Yanking}. However, if +@code{mouse-yank-at-point} is non-@code{nil}, @kbd{Mouse-2} yanks at +point. Then it does not matter where you click, or even which of the +frame's windows you click on. The default value is @code{nil}. This +variable also affects yanking the secondary selection. + +@cindex Delete Selection mode +@cindex mode, Delete Selection +@findex delete-selection-mode + Many graphical applications follow the convention that insertion while text +is selected deletes the selected text. You can make Emacs behave this +way by enabling Delete Selection mode---with @kbd{M-x +delete-selection-mode} or using Custom. Another effect of this mode +is that @key{DEL}, @kbd{C-d} and some other keys, when a selection +exists, will kill the whole selection. It also enables Transient Mark +mode (@pxref{Transient Mark}). + +@node Cut/Paste Other App +@subsection Cut and Paste with Other Window Applications + +@cindex cutting +@cindex pasting +@cindex X cutting and pasting + To copy text to another windowing application, kill it or save it in +the kill ring. Then use the ``paste'' or ``yank'' command of the +other application to insert the text. + + To copy text from another windowing application, use its ``cut'' or +``copy'' command to select the text you want. Then yank it in Emacs +with @kbd{C-y} or @kbd{Mouse-2}. + +@cindex primary selection +@cindex cut buffer +@cindex selection, primary +@vindex x-cut-buffer-max + When Emacs puts text into the kill ring, or rotates text to the +front of the kill ring, it sets the @dfn{primary selection} in the +window system. This is how other windowing applications can access +the text. On the X Window System, emacs also stores the text in the +cut buffer, but only if the text is short enough (the value of +@code{x-cut-buffer-max} specifies the maximum number of characters); +putting long strings in the cut buffer can be slow. + + The commands to yank the first entry in the kill ring actually check +first for a primary selection in another program; after that, they check +for text in the cut buffer. If neither of those sources provides text +to yank, the kill ring contents are used. + + The standard coding system for X Window System selections is +@code{compound-text-with-extensions}. To specify another coding +system for selections, use @kbd{C-x @key{RET} x} or @kbd{C-x @key{RET} +X}. @xref{Communication Coding}. + +@node Word and Line Mouse +@subsection Mouse Commands for Words and Lines + + These variants of @kbd{Mouse-1} select entire words or lines at a time. + +@table @kbd +@item Double-Mouse-1 +This key sets the region around the word which you click on. If you +click on a character with ``symbol'' syntax (such as underscore, in C +mode), it sets the region around the symbol surrounding that character. + +If you click on a character with open-parenthesis or close-parenthesis +syntax, it sets the region around the parenthetical grouping +which that character starts or ends. If you click on a character with +string-delimiter syntax (such as a singlequote or doublequote in C), it +sets the region around the string constant (using heuristics to figure +out whether that character is the beginning or the end of it). + +@item Double-Drag-Mouse-1 +This key selects a region made up of the words you drag across. + +@item Triple-Mouse-1 +This key sets the region around the line you click on. + +@item Triple-Drag-Mouse-1 +This key selects a region made up of the lines you drag across. +@end table + +@node Secondary Selection +@subsection Secondary Selection +@cindex secondary selection + + The @dfn{secondary selection} is another way of selecting text using +the X Window System. It does not use point or the mark, so you can +use it to kill text without setting point or the mark. + +@table @kbd +@findex mouse-set-secondary +@kindex M-Drag-Mouse-1 +@item M-Drag-Mouse-1 +Set the secondary selection, with one end at the place where you press +down the button, and the other end at the place where you release it +(@code{mouse-set-secondary}). The highlighting appears and changes as +you drag. You can control the appearance of the highlighting by +customizing the @code{secondary-selection} face (@pxref{Face +Customization}). + +If you move the mouse off the top or bottom of the window while +dragging, the window scrolls at a steady rate until you move the mouse +back into the window. This way, you can mark regions that don't fit +entirely on the screen. + +This way of setting the secondary selection does not alter the kill ring. + +@findex mouse-start-secondary +@kindex M-Mouse-1 +@item M-Mouse-1 +Set one endpoint for the @dfn{secondary selection} +(@code{mouse-start-secondary}). + +@findex mouse-secondary-save-then-kill +@kindex M-Mouse-3 +@item M-Mouse-3 +Make a secondary selection, using the place specified with @kbd{M-Mouse-1} +as the other end (@code{mouse-secondary-save-then-kill}). This also +puts the selected text in the kill ring. A second click at the same +place kills the secondary selection just made. + +@findex mouse-yank-secondary +@kindex M-Mouse-2 +@item M-Mouse-2 +Insert the secondary selection where you click +(@code{mouse-yank-secondary}). This places point at the end of the +yanked text. +@end table + +Double or triple clicking of @kbd{M-Mouse-1} operates on words and +lines, much like @kbd{Mouse-1}. + +If @code{mouse-yank-at-point} is non-@code{nil}, @kbd{M-Mouse-2} yanks +at point. Then it does not matter precisely where you click, or even +which of the frame's windows you click on. @xref{Mouse Commands}. + +@node Clipboard +@subsection Using the Clipboard +@cindex clipboard +@vindex x-select-enable-clipboard +@findex menu-bar-enable-clipboard +@cindex OpenWindows +@cindex Gnome + + Apart from the primary and secondary selection types, Emacs can +handle the @dfn{clipboard} selection type which is used by some +applications, particularly under OpenWindows and Gnome. + + The command @kbd{M-x menu-bar-enable-clipboard} makes the @code{Cut}, +@code{Paste} and @code{Copy} menu items, as well as the keys of the same +names, all use the clipboard. + + You can customize the variable @code{x-select-enable-clipboard} to make +the Emacs yank functions consult the clipboard before the primary +selection, and to make the kill functions to store in the clipboard as +well as the primary selection. Otherwise they do not access the +clipboard at all. Using the clipboard is the default on MS-Windows and Mac, +but not on other systems. + +@node Mouse References +@section Following References with the Mouse +@kindex Mouse-1 @r{(selection)} +@kindex Mouse-2 @r{(selection)} + + Some read-only Emacs buffers include references you can follow, or +commands you can activate. These include names of files, of buffers, +of possible completions, of matches for a pattern, as well as the +buttons in Help buffers and customization buffers. You can follow the +reference or activate the command by moving point to it and typing +@key{RET}. You can also do this with the mouse, using either +@kbd{Mouse-1} or @kbd{Mouse-2}. + + Since yanking text into a read-only buffer is not allowed, these +buffers generally define @kbd{Mouse-2} to follow a reference or +activate a command. For example, if you click @kbd{Mouse-2} on a file +name in a Dired buffer, you visit that file. If you click +@kbd{Mouse-2} on an error message in the @samp{*Compilation*} buffer, +you go to the source code for that error message. If you click +@kbd{Mouse-2} on a completion in the @samp{*Completions*} buffer, you +choose that completion. + + However, most applications use @kbd{Mouse-1} to do this sort of +thing, so Emacs implements this too. If you click @kbd{Mouse-1} +quickly on a reference or button, it follows or activates. If you +click slowly, it moves point as usual. Dragging, meaning moving the +mouse while it is held down, also has its usual behavior of setting +the region. + +@vindex mouse-1-click-in-non-selected-windows + Normally, the @kbd{Mouse-1} click behavior is performed on links in +any window. The variable @code{mouse-1-click-in-non-selected-windows} +controls whether @kbd{Mouse-1} has this behavior even in non-selected +windows, or only in the selected window. + +@vindex mouse-highlight + You can usually tell when @kbd{Mouse-1} and @kbd{Mouse-2} have this +special sort of meaning because the sensitive text highlights when you +move the mouse over it. The variable @code{mouse-highlight} controls +whether to do this highlighting always (even when such text appears +where the mouse already is), never, or only immediately after you move +the mouse. + +@vindex mouse-1-click-follows-link + In Emacs versions before 22, only @kbd{Mouse-2} follows links and +@kbd{Mouse-1} always sets point. If you prefer this older behavior, +set the variable @code{mouse-1-click-follows-link} to @code{nil}. +This variable also lets you choose various other alternatives for +following links with the mouse. Type @kbd{C-h v +mouse-1-click-follows-link @key{RET}} for more details. + +@node Menu Mouse Clicks +@section Mouse Clicks for Menus + + Several mouse clicks with the @key{CTRL} and @key{SHIFT} modifiers +bring up menus. + +@table @kbd +@item C-Mouse-1 +@kindex C-Mouse-1 +This menu is for selecting a buffer. + +The MSB (``mouse select buffer'') global minor mode makes this +menu smarter and more customizable. @xref{Buffer Menus}. + +@item C-Mouse-2 +@kindex C-Mouse-2 +This menu is for specifying faces and other text properties +for editing formatted text. @xref{Formatted Text}. + +@item C-Mouse-3 +@kindex C-Mouse-3 +This menu is mode-specific. For most modes if Menu-bar mode is on, +this menu has the same items as all the mode-specific menu-bar menus +put together. Some modes may specify a different menu for this +button.@footnote{Some systems use @kbd{Mouse-3} for a mode-specific +menu. We took a survey of users, and found they preferred to keep +@kbd{Mouse-3} for selecting and killing regions. Hence the decision +to use @kbd{C-Mouse-3} for this menu. To use @kbd{Mouse-3} instead, +do @code{(global-set-key [mouse-3] 'mouse-popup-menubar-stuff)}.} If +Menu-bar mode is off, this menu contains all the items which would be +present in the menu bar---not just the mode-specific ones---so that +you can access them without having to display the menu bar. + +@item S-Mouse-1 +This menu is for specifying the frame's default font. +@end table + +@node Mode Line Mouse +@section Mode Line Mouse Commands +@cindex mode line, mouse +@cindex mouse on mode line + + You can use mouse clicks on window mode lines to select and manipulate +windows. + + Some areas of the mode line, such as the buffer name and the major +mode name, have their own special mouse bindings. These areas are +highlighted when you hold the mouse over them, and information about +the special bindings will be displayed (@pxref{Tooltips}). This +section's commands do not apply in those areas. + +@table @kbd +@item Mouse-1 +@kindex Mouse-1 @r{(mode line)} +@kbd{Mouse-1} on a mode line selects the window it belongs to. By +dragging @kbd{Mouse-1} on the mode line, you can move it, thus +changing the height of the windows above and below. Changing heights +with the mouse in this way never deletes windows, it just refuses to +make any window smaller than the minimum height. + +@item Mouse-2 +@kindex Mouse-2 @r{(mode line)} +@kbd{Mouse-2} on a mode line expands that window to fill its frame. + +@item Mouse-3 +@kindex Mouse-3 @r{(mode line)} +@kbd{Mouse-3} on a mode line deletes the window it belongs to. If the +frame has only one window, it buries the current buffer instead, and +switches to another buffer. + +@item C-Mouse-2 +@kindex C-mouse-2 @r{(mode line)} +@kbd{C-Mouse-2} on a mode line splits the window above +horizontally, above the place in the mode line where you click. +@end table + +@kindex C-Mouse-2 @r{(scroll bar)} +@kindex Mouse-1 @r{(scroll bar)} + Using @kbd{Mouse-1} on the divider between two side-by-side mode +lines, you can move the vertical boundary left or right. Using +@kbd{C-Mouse-2} on a scroll bar splits the corresponding window +vertically. @xref{Split Window}. + +@node Creating Frames +@section Creating Frames +@cindex creating frames + +@kindex C-x 5 + The prefix key @kbd{C-x 5} is analogous to @kbd{C-x 4}, with parallel +subcommands. The difference is that @kbd{C-x 5} commands create a new +frame rather than just a new window in the selected frame (@pxref{Pop +Up Window}). If an existing visible or iconified frame already displays +the requested material, these commands use the existing frame, after +raising or deiconifying as necessary. + + The various @kbd{C-x 5} commands differ in how they find or create the +buffer to select: + +@table @kbd +@item C-x 5 2 +@kindex C-x 5 2 +@findex make-frame-command +Create a new frame (@code{make-frame-command}). +@item C-x 5 b @var{bufname} @key{RET} +Select buffer @var{bufname} in another frame. This runs +@code{switch-to-buffer-other-frame}. +@item C-x 5 f @var{filename} @key{RET} +Visit file @var{filename} and select its buffer in another frame. This +runs @code{find-file-other-frame}. @xref{Visiting}. +@item C-x 5 d @var{directory} @key{RET} +Select a Dired buffer for directory @var{directory} in another frame. +This runs @code{dired-other-frame}. @xref{Dired}. +@item C-x 5 m +Start composing a mail message in another frame. This runs +@code{mail-other-frame}. It is the other-frame variant of @kbd{C-x m}. +@xref{Sending Mail}. +@item C-x 5 . +Find a tag in the current tag table in another frame. This runs +@code{find-tag-other-frame}, the multiple-frame variant of @kbd{M-.}. +@xref{Tags}. +@item C-x 5 r @var{filename} @key{RET} +@kindex C-x 5 r +@findex find-file-read-only-other-frame +Visit file @var{filename} read-only, and select its buffer in another +frame. This runs @code{find-file-read-only-other-frame}. +@xref{Visiting}. +@end table + +@cindex default-frame-alist +@cindex initial-frame-alist +@cindex face customization, in @file{~/.emacs} +@cindex color customization, in @file{~/.emacs} + You can control the appearance of new frames you create by setting the +frame parameters in @code{default-frame-alist}. You can use the +variable @code{initial-frame-alist} to specify parameters that affect +only the initial frame. @xref{Initial Parameters,,, elisp, The Emacs +Lisp Reference Manual}, for more information. + +@cindex font (default) + The easiest way to specify the principal font for all your Emacs +frames is with an X resource (@pxref{Font X}), but you can also do it by +modifying @code{default-frame-alist} to specify the @code{font} +parameter, as shown here: + +@example +(add-to-list 'default-frame-alist '(font . "10x20")) +@end example + +@noindent +Here's a similar example for specifying a foreground color: + +@example +(add-to-list 'default-frame-alist '(foreground-color . "blue")) +@end example + +@noindent +By putting such customizations in your @file{~/.emacs} init file, you +can control the appearance of all the frames Emacs creates, including +the initial one. + +@node Frame Commands +@section Frame Commands + + The following commands let you create, delete and operate on frames: + +@table @kbd +@item C-z +@kindex C-z @r{(X windows)} +@findex iconify-or-deiconify-frame +Iconify the selected Emacs frame (@code{iconify-or-deiconify-frame}). +When typed on an Emacs frame's icon, deiconify instead. + +The normal meaning of @kbd{C-z}, to suspend Emacs, is not useful under +a graphical display that allows multiple applications to operate +simultaneously in their own windows, so Emacs gives @kbd{C-z} a +different binding in that case. + +@item C-x 5 0 +@kindex C-x 5 0 +@findex delete-frame +Delete the selected frame (@code{delete-frame}). This is not allowed if +there is only one frame. + +@item C-x 5 o +@kindex C-x 5 o +@findex other-frame +Select another frame, raise it, and warp the mouse to it so that it +stays selected. If you repeat this command, it cycles through all the +frames on your terminal. + +@item C-x 5 1 +@kindex C-x 5 1 +@findex delete-other-frames +Delete all frames except the selected one. +@end table + +@vindex focus-follows-mouse + To make the command @kbd{C-x 5 o} work properly, you must tell Emacs +how the system (or the window manager) generally handles +focus-switching between windows. There are two possibilities: either +simply moving the mouse onto a window selects it (gives it focus), or +you have to click on it in a suitable way to do so. On X, this focus +policy also affects whether the focus is given to a frame that Emacs +raises. Unfortunately there is no way Emacs can find out +automatically which way the system handles this, so you have to +explicitly say, by setting the variable @code{focus-follows-mouse}. +If just moving the mouse onto a window selects it, that variable +should be @code{t}; if a click is necessary, the variable should be +@code{nil}. + +The window manager that is part of MS-Windows always gives focus to a +frame that raises, so this variable has no effect in the native +MS-Windows build of Emacs. + +@node Speedbar +@section Speedbar Frames +@cindex speedbar + +@cindex attached frame (of speedbar) + The @dfn{speedbar} is a special frame for conveniently navigating in +or operating on another frame. The speedbar, when it exists, is +always associated with a specific frame, called its @dfn{attached +frame}; all speedbar operations act on that frame. + + Type @kbd{M-x speedbar} to create the speedbar and associate it with +the current frame. To dismiss the speedbar, type @kbd{M-x speedbar} +again, or select the speedbar and type @kbd{q}. (You can also delete +the speedbar frame like any other Emacs frame.) If you wish to +associate the speedbar with a different frame, dismiss it and call +@kbd{M-x speedbar} from that frame. + + The speedbar can operate in various modes. Its default mode is +@dfn{File Display} mode, which shows the files in the current +directory of the selected window of the attached frame, one file per +line. Clicking on a file name visits that file in the selected window +of the attached frame, and clicking on a directory name shows that +directory in the speedbar (@pxref{Mouse References}). Each line also +has a box, @samp{[+]} or @samp{<+>}, that you can click on to +@dfn{expand} the contents of that item. Expanding a directory adds +the contents of that directory to the speedbar display, underneath the +directory's own line. Expanding an ordinary file adds a list of the +tags in that file to the speedbar display; you can click on a tag name +to jump to that tag in the selected window of the attached frame. +When a file or directory is expanded, the @samp{[+]} changes to +@samp{[-]}; you can click on that box to @dfn{contract} the item, +hiding its contents. + + You navigate through the speedbar using the keyboard, too. Typing +@kbd{RET} while point is on a line in the speedbar is equivalent to +clicking the item on the current line, and @kbd{SPC} expands or +contracts the item. @kbd{U} displays the parent directory of the +current directory. To copy, delete, or rename the file on the current +line, type @kbd{C}, @kbd{D}, and @kbd{R} respectively. To create a +new directory, type @kbd{M}. + + Another general-purpose speedbar mode is @dfn{Buffer Display} mode; +in this mode, the speedbar displays a list of Emacs buffers. To +switch to this mode, type @kbd{b} in the speedbar. To return to File +Display mode, type @kbd{f}. You can also change the display mode by +clicking @kbd{mouse-3} anywhere in the speedbar window (or +@kbd{mouse-1} on the mode-line) and selecting @samp{Displays} in the +pop-up menu. + + Some major modes, including Rmail mode, Info, and GUD, have +specialized ways of putting useful items into the speedbar for you to +select. For example, in Rmail mode, the speedbar shows a list of Rmail +files, and lets you move the current message to another Rmail file by +clicking on its @samp{<M>} box. + + For more details on using and programming the speedbar, @xref{Top, +Speedbar,,speedbar, Speedbar Manual}. + +@node Multiple Displays +@section Multiple Displays +@cindex multiple displays + + A single Emacs can talk to more than one X display. Initially, Emacs +uses just one display---the one specified with the @env{DISPLAY} +environment variable or with the @samp{--display} option (@pxref{Initial +Options}). To connect to another display, use the command +@code{make-frame-on-display}: + +@findex make-frame-on-display +@table @kbd +@item M-x make-frame-on-display @key{RET} @var{display} @key{RET} +Create a new frame on display @var{display}. +@end table + + A single X server can handle more than one screen. When you open +frames on two screens belonging to one server, Emacs knows they share a +single keyboard, and it treats all the commands arriving from these +screens as a single stream of input. + + When you open frames on different X servers, Emacs makes a separate +input stream for each server. This way, two users can type +simultaneously on the two displays, and Emacs will not garble their +input. Each server also has its own selected frame. The commands you +enter with a particular X server apply to that server's selected frame. + + Despite these features, people using the same Emacs job from different +displays can still interfere with each other if they are not careful. +For example, if any one types @kbd{C-x C-c}, that exits the Emacs job +for all of them! + +@node Special Buffer Frames +@section Special Buffer Frames + +@vindex special-display-buffer-names + You can make certain chosen buffers, which Emacs normally displays +in ``another window,'' appear in special frames of their own. To do +this, set the variable @code{special-display-buffer-names} to a list +of buffer names; any buffer whose name is in that list automatically +gets a special frame, when an Emacs command wants to display it ``in +another window.'' + + For example, if you set the variable this way, + +@example +(setq special-display-buffer-names + '("*Completions*" "*grep*" "*tex-shell*")) +@end example + +@noindent +then completion lists, @code{grep} output and the @TeX{} mode shell +buffer get individual frames of their own. These frames, and the +windows in them, are never automatically split or reused for any other +buffers. They continue to show the buffers they were created for, +unless you alter them by hand. Killing the special buffer deletes its +frame automatically. + +@vindex special-display-regexps + More generally, you can set @code{special-display-regexps} to a list +of regular expressions; then a buffer gets its own frame if its name +matches any of those regular expressions. (Once again, this applies only +to buffers that normally get displayed for you in ``another window.'') + +@vindex special-display-frame-alist + The variable @code{special-display-frame-alist} specifies the frame +parameters for these frames. It has a default value, so you don't need +to set it. + + For those who know Lisp, an element of +@code{special-display-buffer-names} or @code{special-display-regexps} +can also be a list. Then the first element is the buffer name or +regular expression; the rest of the list specifies how to create the +frame. It can be an association list specifying frame parameter +values; these values take precedence over parameter values specified +in @code{special-display-frame-alist}. If you specify the symbol +@code{same-window} as a ``frame parameter'' in this list, with a +non-@code{nil} value, that means to use the selected window if +possible. If you use the symbol @code{same-frame} as a ``frame +parameter'' in this list, with a non-@code{nil} value, that means to +use the selected frame if possible. + + Alternatively, the value can have this form: + +@example +(@var{function} @var{args}...) +@end example + +@noindent +where @var{function} is a symbol. Then the frame is constructed by +calling @var{function}; its first argument is the buffer, and its +remaining arguments are @var{args}. + + An analogous feature lets you specify buffers which should be +displayed in the selected window. @xref{Force Same Window}. The +same-window feature takes precedence over the special-frame feature; +therefore, if you add a buffer name to +@code{special-display-buffer-names} and it has no effect, check to see +whether that feature is also in use for the same buffer name. + +@node Frame Parameters +@section Setting Frame Parameters +@cindex Auto-Raise mode +@cindex Auto-Lower mode + +@kindex S-Mouse-1 + You can specify the font and colors used for text display, and the +colors for the frame borders, the cursor, and the mouse cursor, by +customizing the faces @code{default}, @code{border}, @code{cursor} and +@code{mouse}. @xref{Face Customization}. You can also set a frame's +default font through a pop-up menu. Press @kbd{S-Mouse-1} to activate +this menu. + + These commands are available for controlling the window management +behavior of the selected frame. + +@table @kbd +@findex auto-raise-mode +@item M-x auto-raise-mode +Toggle whether or not the selected frame should auto-raise. Auto-raise +means that every time you move the mouse onto the frame, it raises the +frame. + +Some window managers also implement auto-raise. If you enable +auto-raise for Emacs frames in your window manager, it will work, but +it is beyond Emacs' control, so @code{auto-raise-mode} has no effect +on it. + +@findex auto-lower-mode +@item M-x auto-lower-mode +Toggle whether or not the selected frame should auto-lower. +Auto-lower means that every time you move the mouse off the frame, +the frame moves to the bottom of the stack on the screen. + +The command @code{auto-lower-mode} has no effect on auto-lower +implemented by the window manager. To control that, you must use the +appropriate window manager features. +@end table + + In Emacs versions that use an X toolkit, the color-setting and +font-setting functions don't affect menus and the menu bar, since they +are displayed by their own widget classes. To change the appearance of +the menus and menu bar, you must use X resources (@pxref{Resources}). +@xref{Colors}, regarding colors. @xref{Font X}, regarding choice of +font. + + Colors, fonts, and other attributes of the frame's display can also +be customized by setting frame parameters in the variable +@code{default-frame-alist} (@pxref{Creating Frames}). For a detailed +description of frame parameters and customization, see @ref{Frame +Parameters,,, elisp, The Emacs Lisp Reference Manual}. + +@node Scroll Bars +@section Scroll Bars +@cindex Scroll Bar mode +@cindex mode, Scroll Bar + + On graphical displays, Emacs normally makes a @dfn{scroll bar} at +the left of each Emacs window.@footnote{Placing it at the left is +usually more useful with overlapping frames with text starting at the +left margin.} The scroll bar runs the height of the window, and shows +a moving rectangular inner box which represents the portion of the +buffer currently displayed. The entire height of the scroll bar +represents the entire length of the buffer. + + You can use @kbd{Mouse-2} (normally, the middle button) in the scroll +bar to move or drag the inner box up and down. If you move it to the +top of the scroll bar, you see the top of the buffer. If you move it to +the bottom of the scroll bar, you see the bottom of the buffer. + + The left and right buttons in the scroll bar scroll by controlled +increments. @kbd{Mouse-1} (normally, the left button) moves the line at +the level where you click up to the top of the window. @kbd{Mouse-3} +(normally, the right button) moves the line at the top of the window +down to the level where you click. By clicking repeatedly in the same +place, you can scroll by the same distance over and over. + + You can also click @kbd{C-Mouse-2} in the scroll bar to split a +window vertically. The split occurs on the line where you click. + +@findex scroll-bar-mode +@vindex scroll-bar-mode + You can enable or disable Scroll Bar mode with the command @kbd{M-x +scroll-bar-mode}. With no argument, it toggles the use of scroll +bars. With an argument, it turns use of scroll bars on if and only if +the argument is positive. This command applies to all frames, +including frames yet to be created. Customize the variable +@code{scroll-bar-mode} to control the use of scroll bars at startup. +You can use it to specify that they are placed at the right of windows +if you prefer that. You have to set this variable through the +@samp{Customize} interface (@pxref{Easy Customization}), or it will +not work properly. + + You can also use the X resource @samp{verticalScrollBars} to control +the initial setting of Scroll Bar mode. @xref{Resources}. + +@findex toggle-scroll-bar + To enable or disable scroll bars for just the selected frame, use the +command @kbd{M-x toggle-scroll-bar}. + +@vindex scroll-bar-width +@cindex width of the scroll bar + You can control the scroll bar width by changing the value of the +@code{scroll-bar-width} frame parameter. + +@node Wheeled Mice +@section Scrolling With ``Wheeled'' Mice + +@cindex mouse wheel +@cindex wheel, mouse +@findex mouse-wheel-mode +@cindex Mouse Wheel minor mode +@cindex mode, Mouse Wheel + Some mice have a ``wheel'' instead of a third button. You can +usually click the wheel to act as either @kbd{Mouse-2} or +@kbd{Mouse-3}, depending on the setup. You can also use the wheel to +scroll windows instead of using the scroll bar or keyboard commands. +Mouse wheel support only works if the system generates appropriate +events; whenever possible, it is turned on by default. To toggle this +feature, use @kbd{M-x mouse-wheel-mode}. + +@vindex mouse-wheel-follow-mouse +@vindex mouse-wheel-scroll-amount +@vindex mouse-wheel-progressive-speed + The two variables @code{mouse-wheel-follow-mouse} and +@code{mouse-wheel-scroll-amount} determine where and by how much +buffers are scrolled. The variable +@code{mouse-wheel-progressive-speed} determines whether the scroll +speed is linked to how fast you move the wheel. + +@node Drag and Drop +@section Drag and Drop +@cindex drag and drop + + Emacs supports @dfn{drag and drop} using the mouse. For instance, +dropping text onto an Emacs frame inserts the text where it is dropped. +Dropping a file onto an Emacs frame visits that file. As a special +case, dropping the file on a Dired buffer moves or copies the file +(according to the conventions of the application it came from) into the +directory displayed in that buffer. + +@vindex dnd-open-file-other-window + Dropping a file normally visits it in the window you drop it on. If +you prefer to visit the file in a new window in such cases, customize +the variable @code{dnd-open-file-other-window}. + + The XDND and Motif drag and drop protocols, and the old KDE 1.x +protocol, are currently supported. + +@node Menu Bars +@section Menu Bars +@cindex Menu Bar mode +@cindex mode, Menu Bar +@findex menu-bar-mode +@vindex menu-bar-mode + + You can turn display of menu bars on or off with @kbd{M-x +menu-bar-mode} or by customizing the variable @code{menu-bar-mode}. +With no argument, this command toggles Menu Bar mode, a +minor mode. With an argument, the command turns Menu Bar mode on if the +argument is positive, off if the argument is not positive. You can use +the X resource @samp{menuBarLines} to control the initial setting of +Menu Bar mode. @xref{Resources}. + +@kindex C-Mouse-3 @r{(when menu bar is disabled)} + Expert users often turn off the menu bar, especially on text-only +terminals, where this makes one additional line available for text. +If the menu bar is off, you can still pop up a menu of its contents +with @kbd{C-Mouse-3} on a display which supports pop-up menus. +@xref{Menu Mouse Clicks}. + + @xref{Menu Bar}, for information on how to invoke commands with the +menu bar. @xref{X Resources}, for how to customize the menu bar +menus' visual appearance. + +@node Tool Bars +@section Tool Bars +@cindex Tool Bar mode +@cindex mode, Tool Bar +@cindex icons, toolbar + + The @dfn{tool bar} is a line (or lines) of icons at the top of the +Emacs window, just below the menu bar. You can click on these icons +with the mouse to do various jobs. + + The global tool bar contains general commands. Some major modes +define their own tool bars to replace it. A few ``special'' modes +that are not designed for ordinary editing remove some items from the +global tool bar. + + Tool bars work only on a graphical display. The tool bar uses colored +XPM icons if Emacs was built with XPM support. Otherwise, the tool +bar uses monochrome icons (PBM or XBM format). + +@findex tool-bar-mode +@vindex tool-bar-mode + You can turn display of tool bars on or off with @kbd{M-x +tool-bar-mode} or by customizing the option @code{tool-bar-mode}. + +@node Dialog Boxes +@section Using Dialog Boxes +@cindex dialog boxes + +@vindex use-dialog-box + A dialog box is a special kind of menu for asking you a yes-or-no +question or some other special question. Many Emacs commands use a +dialog box to ask a yes-or-no question, if you used the mouse to +invoke the command to begin with. + + You can customize the variable @code{use-dialog-box} to suppress the +use of dialog boxes. This also controls whether to use file selection +windows (but those are not supported on all platforms). + +@vindex use-file-dialog + A file selection window is a special kind of dialog box for asking +for file names. You can customize the variable @code{use-file-dialog} +to suppress the use of file selection windows, even if you still want +other kinds of dialogs. This variable has no effect if you have +suppressed all dialog boxes with the variable @code{use-dialog-box}. + +@vindex x-gtk-show-hidden-files + For Gtk+ version 2.4 and newer, Emacs use the Gtk+ file chooser +dialog. Emacs adds a toggle button that enables and disables showing +of hidden files (files starting with a dot) in that dialog. The +variable @code{x-gtk-show-hidden-files} controls whether to show +hidden files by default. + +@vindex x-gtk-use-old-file-dialog + For Gtk+ versions 2.4 through 2.10, you can select the old file +dialog (@code{gtk-file-selector}) by setting the variable +@code{x-gtk-use-old-file-dialog} to a non-@code{nil} value. If it is +@code{nil}, Emacs uses @code{gtk-file-chooser}. If Emacs is built +with a Gtk+ version that has only one file dialog, this variable has +no effect. + +@vindex x-gtk-file-dialog-help-text + Emacs adds help text to the Gtk+ file chooser dialog. The variable +@code{x-gtk-file-dialog-help-text} specifies the text to add; if it is +@code{nil}, that disables the added text. + +@node Tooltips +@section Tooltips +@cindex tooltips + + @dfn{Tooltips} are small windows that display text information at the +current mouse position. They activate when there is a pause in mouse +movement. There are two types of tooltip: help tooltips and GUD +tooltips. + + @dfn{Help tooltips} typically display over text---including the mode +line---but are also available for other parts of the Emacs frame, such +as the tool bar and menu items. + +@findex tooltip-mode + You can toggle display of help tooltips (Tooltip mode) with the +command @kbd{M-x tooltip-mode}. When Tooltip mode is disabled, the +help text is displayed in the echo area instead. + + @dfn{GUD tooltips} show values of variables. They are useful when +you are debugging a program. @xref{Debugger Operation}. + +@vindex tooltip-delay + The variables @code{tooltip-delay} specifies how long Emacs should +wait before displaying a tooltip. For additional customization +options for displaying tooltips, use @kbd{M-x customize-group +@key{RET} tooltip @key{RET}}. @xref{X Resources}, for information on +customizing the windows that display tooltips. + +@node Mouse Avoidance +@section Mouse Avoidance +@cindex avoiding mouse in the way of your typing +@cindex mouse avoidance + +@vindex mouse-avoidance-mode +Mouse Avoidance mode keeps the mouse pointer away from point, to avoid +obscuring text you want to edit. Whenever it moves the mouse, it also +raises the frame. To use Mouse Avoidance mode, customize the variable +@code{mouse-avoidance-mode}. You can set this to various values to +move the mouse in several ways: + +@table @code +@item banish +Move the mouse to the upper-right corner on any key-press; +@item exile +Move the mouse to the corner only if the cursor gets too close, +and allow it to return once the cursor is out of the way; +@item jump +If the cursor gets too close to the mouse, displace the mouse +a random distance & direction; +@item animate +As @code{jump}, but shows steps along the way for illusion of motion; +@item cat-and-mouse +The same as @code{animate}; +@item proteus +As @code{animate}, but changes the shape of the mouse pointer too. +@end table + +@findex mouse-avoidance-mode +You can also use the command @kbd{M-x mouse-avoidance-mode} to enable +the mode. + +@node Non-Window Terminals +@section Non-Window Terminals +@cindex non-window terminals +@cindex single-frame terminals + + On a text-only terminal, Emacs can display only one Emacs frame at a +time. However, you can still create multiple Emacs frames, and switch +between them. Switching frames on these terminals is much like +switching between different window configurations. + + Use @kbd{C-x 5 2} to create a new frame and switch to it; use @kbd{C-x +5 o} to cycle through the existing frames; use @kbd{C-x 5 0} to delete +the current frame. + + Each frame has a number to distinguish it. If your terminal can +display only one frame at a time, the selected frame's number @var{n} +appears near the beginning of the mode line, in the form +@samp{F@var{n}}. + +@findex set-frame-name +@findex select-frame-by-name + @samp{F@var{n}} is in fact the frame's initial name. You can give +frames more meaningful names if you wish, and you can select a frame +by its name. Use the command @kbd{M-x set-frame-name @key{RET} +@var{name} @key{RET}} to specify a new name for the selected frame, +and use @kbd{M-x select-frame-by-name @key{RET} @var{name} @key{RET}} +to select a frame according to its name. The name you specify appears +in the mode line when the frame is selected. + +@node Text-Only Mouse +@section Using a Mouse in Terminal Emulators +@cindex mouse support +@cindex terminal emulators, mouse support + +Some terminal emulators support mouse clicks in the terminal window. + +@cindex xterm +In a terminal emulator which is compatible with @code{xterm}, +you can use @kbd{M-x xterm-mouse-mode} to give Emacs control over +simple use of the mouse---basically, only non-modified single clicks +are supported. The normal @code{xterm} mouse functionality for such +clicks is still available by holding down the @kbd{SHIFT} key when you +press the mouse button. Xterm Mouse mode is a global minor mode +(@pxref{Minor Modes}). Repeating the command turns the mode off +again. + +In the console on GNU/Linux, you can use @kbd{M-x t-mouse-mode}. You +need to have the gpm package installed and running on your system in +order for this to work. + +@ignore + arch-tag: 7dcf3a31-a43b-45d4-a900-445b10d77e49 +@end ignore diff --git a/doc/emacs/glossary.texi b/doc/emacs/glossary.texi new file mode 100644 index 00000000000..f289c2ca1cb --- /dev/null +++ b/doc/emacs/glossary.texi @@ -0,0 +1,1323 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2001, 2002, +@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Glossary, Key Index, Intro, Top +@unnumbered Glossary + +@table @asis +@item Abbrev +An abbrev is a text string which expands into a different text string +when present in the buffer. For example, you might define a few letters +as an abbrev for a long phrase that you want to insert frequently. +@xref{Abbrevs}. + +@item Aborting +Aborting means getting out of a recursive edit (q.v.@:). The +commands @kbd{C-]} and @kbd{M-x top-level} are used for this. +@xref{Quitting}. + +@item Alt +Alt is the name of a modifier bit which a keyboard input character may +have. To make a character Alt, type it while holding down the @key{ALT} +key. Such characters are given names that start with @kbd{Alt-} +(usually written @kbd{A-} for short). (Note that many terminals have a +key labeled @key{ALT} which is really a @key{META} key.) @xref{User +Input, Alt}. + +@item Argument +See `numeric argument.' + +@item @acronym{ASCII} character +An @acronym{ASCII} character is either an @acronym{ASCII} control character or an @acronym{ASCII} +printing character. @xref{User Input}. + +@item @acronym{ASCII} control character +An @acronym{ASCII} control character is the Control version of an upper-case +letter, or the Control version of one of the characters @samp{@@[\]^_?}. + +@item @acronym{ASCII} printing character +@acronym{ASCII} printing characters include letters, digits, space, and these +punctuation characters: @samp{!@@#$%^& *()_-+=|\~` @{@}[]:;"' <>,.?/}. + +@item Auto Fill Mode +Auto Fill mode is a minor mode in which text that you insert is +automatically broken into lines of a given maximum width. +@xref{Filling}. + +@item Auto Saving +Auto saving is the practice of saving the contents of an Emacs buffer in +a specially-named file, so that the information will not be lost if the +buffer is lost due to a system error or user error. @xref{Auto Save}. + +@item Autoloading +Emacs automatically loads Lisp libraries when a Lisp program requests a +function or a variable from those libraries. This is called +`autoloading'. @xref{Lisp Libraries}. + +@item Backtrace +A backtrace is a trace of a series of function calls showing how a +program arrived to a certain point. It is used mainly for finding and +correcting bugs (q.v.@:). Emacs can display a backtrace when it signals +an error or when you type @kbd{C-g} (see `quitting'). @xref{Checklist}. + +@item Backup File +A backup file records the contents that a file had before the current +editing session. Emacs makes backup files automatically to help you +track down or cancel changes you later regret making. @xref{Backup}. + +@item Balancing Parentheses +Emacs can balance parentheses (or other matching delimiters) either +manually or automatically. You do manual balancing with the commands +to move over parenthetical groupings (@pxref{Moving by Parens}). +Automatic balancing works by blinking or highlighting the delimiter +that matches the one you just inserted (@pxref{Matching,,Matching +Parens}). + +@item Balanced Expressions +A balanced expression is a syntactically recognizable expression, such +as a symbol, number, string constant, block, or parenthesized expression +in C. @xref{Expressions,Balanced Expressions}. + +@item Balloon Help +See `tooltips.' + +@item Base Buffer +A base buffer is a buffer whose text is shared by an indirect buffer +(q.v.@:). + +@item Bind +To bind a key sequence means to give it a binding (q.v.@:). +@xref{Rebinding}. + +@item Binding +A key sequence gets its meaning in Emacs by having a binding, which is a +command (q.v.@:), a Lisp function that is run when the user types that +sequence. @xref{Commands,Binding}. Customization often involves +rebinding a character to a different command function. The bindings of +all key sequences are recorded in the keymaps (q.v.@:). @xref{Keymaps}. + +@item Blank Lines +Blank lines are lines that contain only whitespace. Emacs has several +commands for operating on the blank lines in the buffer. + +@item Bookmark +Bookmarks are akin to registers (q.v.@:) in that they record positions +in buffers to which you can return later. Unlike registers, bookmarks +persist between Emacs sessions. + +@item Border +A border is a thin space along the edge of the frame, used just for +spacing, not for displaying anything. An Emacs frame has an ordinary +external border, outside of everything including the menu bar, plus an +internal border that surrounds the text windows and their scroll bars +and separates them from the menu bar and tool bar. You can customize +both borders with options and resources (@pxref{Borders X}). Borders +are not the same as fringes (q.v.@:). + +@item Buffer +The buffer is the basic editing unit; one buffer corresponds to one text +being edited. You can have several buffers, but at any time you are +editing only one, the `current buffer,' though several can be visible +when you are using multiple windows (q.v.@:). Most buffers are visiting +(q.v.@:) some file. @xref{Buffers}. + +@item Buffer Selection History +Emacs keeps a buffer selection history which records how recently each +Emacs buffer has been selected. This is used for choosing a buffer to +select. @xref{Buffers}. + +@item Bug +A bug is an incorrect or unreasonable behavior of a program, or +inaccurate or confusing documentation. Emacs developers treat bug +reports, both in Emacs code and its documentation, very seriously and +ask you to report any bugs you find. @xref{Bugs}. + +@item Button Down Event +A button down event is the kind of input event generated right away when +you press down on a mouse button. @xref{Mouse Buttons}. + +@item By Default +See `default.' + +@item Byte Compilation +See `compilation.' + +@item @kbd{C-} +@kbd{C-} in the name of a character is an abbreviation for Control. +@xref{User Input,C-}. + +@item @kbd{C-M-} +@kbd{C-M-} in the name of a character is an abbreviation for +Control-Meta. @xref{User Input,C-M-}. + +@item Case Conversion +Case conversion means changing text from upper case to lower case or +vice versa. @xref{Case}, for the commands for case conversion. + +@item Character +Characters form the contents of an Emacs buffer; see @ref{Text +Characters}. Also, key sequences (q.v.@:) are usually made up of +characters (though they may include other input events as well). +@xref{User Input}. + +@item Character Set +Emacs supports a number of character sets, each of which represents a +particular alphabet or script. @xref{International}. + +@item Character Terminal +See `text-only terminal.' + +@item Click Event +A click event is the kind of input event generated when you press a +mouse button and release it without moving the mouse. @xref{Mouse Buttons}. + +@item Clipboard +A clipboard is a buffer provided by the window system for transferring +text between applications. On the X Window system, the clipboard is +provided in addition to the primary selection (q.v.@:); on MS-Windows and Mac, +the clipboard is used @emph{instead} of the primary selection. +@xref{Clipboard}. + +@item Coding System +A coding system is an encoding for representing text characters in a +file or in a stream of information. Emacs has the ability to convert +text to or from a variety of coding systems when reading or writing it. +@xref{Coding Systems}. + +@item Command +A command is a Lisp function specially defined to be able to serve as a +key binding in Emacs. When you type a key sequence (q.v.@:), its +binding (q.v.@:) is looked up in the relevant keymaps (q.v.@:) to find +the command to run. @xref{Commands}. + +@item Command History +See `minibuffer history.' + +@item Command Name +A command name is the name of a Lisp symbol which is a command +(@pxref{Commands}). You can invoke any command by its name using +@kbd{M-x} (@pxref{M-x,M-x,Running Commands by Name}). + +@item Comment +A comment is text in a program which is intended only for humans reading +the program, and which is marked specially so that it will be ignored +when the program is loaded or compiled. Emacs offers special commands +for creating, aligning and killing comments. @xref{Comments}. + +@item Common Lisp +Common Lisp is a dialect of Lisp (q.v.@:) much larger and more powerful +than Emacs Lisp. Emacs provides a subset of Common Lisp in the CL +package. @xref{Top, Common Lisp, Overview, cl, Common Lisp Extensions}. + +@item Compilation +Compilation is the process of creating an executable program from source +code. Emacs has commands for compiling files of Emacs Lisp code +(@pxref{Byte Compilation,,, elisp, the Emacs Lisp +Reference Manual}) and programs in C and other languages +(@pxref{Compilation}). + +@item Complete Key +A complete key is a key sequence which fully specifies one action to be +performed by Emacs. For example, @kbd{X} and @kbd{C-f} and @kbd{C-x m} +are complete keys. Complete keys derive their meanings from being bound +(q.v.@:) to commands (q.v.@:). Thus, @kbd{X} is conventionally bound to +a command to insert @samp{X} in the buffer; @kbd{C-x m} is +conventionally bound to a command to begin composing a mail message. +@xref{Keys}. + +@item Completion +Completion is what Emacs does when it automatically fills out an +abbreviation for a name into the entire name. Completion is done for +minibuffer (q.v.@:) arguments when the set of possible valid inputs +is known; for example, on command names, buffer names, and +file names. Completion occurs when @key{TAB}, @key{SPC} or @key{RET} +is typed. @xref{Completion}.@refill + +@item Continuation Line +When a line of text is longer than the width of the window, it +takes up more than one screen line when displayed. We say that the +text line is continued, and all screen lines used for it after the +first are called continuation lines. @xref{Continuation Lines}. +A related Emacs feature is `filling' (q.v.@:). + +@item Control Character +A control character is a character that you type by holding down the +@key{CTRL} key. Some control characters also have their own keys, so +that you can type them without using @key{CTRL}. For example, +@key{RET}, @key{TAB}, @key{ESC} and @key{DEL} are all control +characters. @xref{User Input}. + +@item Copyleft +A copyleft is a notice giving the public legal permission to +redistribute and modify a program or other work of art, but requiring +modified versions to carry similar permission. Copyright is normally +used to keep users divided and helpless; with copyleft we turn that +around to empower users and encourage them to cooperate. + +The particular form of copyleft used by the GNU project is called the +GNU General Public License. @xref{Copying}. + +@item @key{CTRL} +The @key{CTRL} or ``control'' key is what you hold down +in order to enter a control character (q.v.). + +@item Current Buffer +The current buffer in Emacs is the Emacs buffer on which most editing +commands operate. You can select any Emacs buffer as the current one. +@xref{Buffers}. + +@item Current Line +The current line is the line that point is on (@pxref{Point}). + +@item Current Paragraph +The current paragraph is the paragraph that point is in. If point is +between two paragraphs, the current paragraph is the one that follows +point. @xref{Paragraphs}. + +@item Current Defun +The current defun is the defun (q.v.@:) that point is in. If point is +between defuns, the current defun is the one that follows point. +@xref{Defuns}. + +@item Cursor +The cursor is the rectangle on the screen which indicates the position +called point (q.v.@:) at which insertion and deletion takes place. +The cursor is on or under the character that follows point. Often +people speak of `the cursor' when, strictly speaking, they mean +`point.' @xref{Point,Cursor}. + +@item Customization +Customization is making minor changes in the way Emacs works. It is +often done by setting variables (@pxref{Variables}) or faces +(@pxref{Face Customization}), or by rebinding key sequences +(@pxref{Keymaps}). + +@cindex cut and paste +@item Cut and Paste +See `killing' and `yanking.' + +@item Default Argument +The default for an argument is the value that will be assumed if you +do not specify one. When the minibuffer is used to read an argument, +the default argument is used if you just type @key{RET}. +@xref{Minibuffer}. + +@item Default +A default is the value that is used for a certain purpose if and when +you do not specify a value to use. + +@item Default Directory +When you specify a file name that does not start with @samp{/} or @samp{~}, +it is interpreted relative to the current buffer's default directory. +(On MS-Windows and MS-DOS, file names which start with a drive letter +@samp{@var{x}:} are treated as absolute, not relative.) +@xref{Minibuffer File,Default Directory}. + +@item Defun +A defun is a major definition at the top level in a program. The name +`defun' comes from Lisp, where most such definitions use the construct +@code{defun}. @xref{Defuns}. + +@item @key{DEL} +@key{DEL} is a character that runs the command to delete one character +of text before the cursor. It is typically either the @key{DELETE} +key or the @key{BACKSPACE} key, whichever one is easy to type. +@xref{Erasing,DEL}. + +@item Deletion +Deletion means erasing text without copying it into the kill ring +(q.v.@:). The alternative is killing (q.v.@:). @xref{Killing,Deletion}. + +@item Deletion of Files +Deleting a file means erasing it from the file system. +@xref{Misc File Ops,Misc File Ops,Miscellaneous File Operations}. + +@item Deletion of Messages +Deleting a message means flagging it to be eliminated from your mail +file. Until you expunge (q.v.@:) the Rmail file, you can still undelete +the messages you have deleted. @xref{Rmail Deletion}. + +@item Deletion of Windows +Deleting a window means eliminating it from the screen. Other windows +expand to use up the space. The deleted window can never come back, +but no actual text is thereby lost. @xref{Windows}. + +@item Directory +File directories are named collections in the file system, within which +you can place individual files or subdirectories. @xref{Directories}. + +@item Dired +Dired is the Emacs facility that displays the contents of a file +directory and allows you to ``edit the directory,'' performing +operations on the files in the directory. @xref{Dired}. + +@item Disabled Command +A disabled command is one that you may not run without special +confirmation. The usual reason for disabling a command is that it is +confusing for beginning users. @xref{Disabling}. + +@item Down Event +Short for `button down event' (q.v.@:). + +@item Drag Event +A drag event is the kind of input event generated when you press a mouse +button, move the mouse, and then release the button. @xref{Mouse +Buttons}. + +@item Dribble File +A dribble file is a file into which Emacs writes all the characters that +you type on the keyboard. Dribble files are used to make a record +for debugging Emacs bugs. Emacs does not make a dribble file unless you +tell it to. @xref{Bugs}. + +@item Echo Area +The echo area is the bottom line of the screen, used for echoing the +arguments to commands, for asking questions, and showing brief messages +(including error messages). The messages are stored in the buffer +@samp{*Messages*} so you can review them later. @xref{Echo Area}. + +@item Echoing +Echoing is acknowledging the receipt of input events by displaying +them (in the echo area). Emacs never echoes single-character key +sequences; longer key sequences echo only if you pause while typing +them. + +@item Electric +We say that a character is electric if it is normally self-inserting +(q.v.@:), but the current major mode (q.v.@:) redefines it to do something +else as well. For example, some programming language major modes define +particular delimiter characters to reindent the line or insert one or +more newlines in addition to self-insertion. + +@item End Of Line +End of line is a character or a sequence of characters that indicate +the end of a text line. On GNU and Unix systems, this is a newline +(q.v.@:), but other systems have other conventions. @xref{Coding +Systems,end-of-line}. Emacs can recognize several end-of-line +conventions in files and convert between them. + +@item Environment Variable +An environment variable is one of a collection of variables stored by +the operating system, each one having a name and a value. Emacs can +access environment variables set by its parent shell, and it can set +variables in the environment it passes to programs it invokes. +@xref{Environment}. + +@item EOL +See `end of line.' + +@item Error +An error occurs when an Emacs command cannot execute in the current +circumstances. When an error occurs, execution of the command stops +(unless the command has been programmed to do otherwise) and Emacs +reports the error by displaying an error message (q.v.@:). Type-ahead +is discarded. Then Emacs is ready to read another editing command. + +@item Error Message +An error message is a single line of output displayed by Emacs when the +user asks for something impossible to do (such as, killing text +forward when point is at the end of the buffer). They appear in the +echo area, accompanied by a beep. + +@item @key{ESC} +@key{ESC} is a character used as a prefix for typing Meta characters on +keyboards lacking a @key{META} key. Unlike the @key{META} key (which, +like the @key{SHIFT} key, is held down while another character is +typed), you press the @key{ESC} key as you would press a letter key, and +it applies to the next character you type. + +@item Expression +See `balanced expression.' + +@item Expunging +Expunging an Rmail file or Dired buffer or a Gnus newsgroup buffer is an +operation that truly discards the messages or files you have previously +flagged for deletion. + +@item Face +A face is a style of displaying characters. It specifies attributes +such as font family and size, foreground and background colors, +underline and strike-through, background stipple, etc. Emacs provides +features to associate specific faces with portions of buffer text, in +order to display that text as specified by the face attributes. +@xref{Faces}. + +@item File Locking +Emacs uses file locking to notice when two different users +start to edit one file at the same time. @xref{Interlocking}. + +@item File Name +A file name is a name that refers to a file. File names may be relative +or absolute; the meaning of a relative file name depends on the current +directory, but an absolute file name refers to the same file regardless +of which directory is current. On GNU and Unix systems, an absolute +file name starts with a slash (the root directory) or with @samp{~/} or +@samp{~@var{user}/} (a home directory). On MS-Windows/MS-DOS, an +absolute file name can also start with a drive letter and a colon +@samp{@var{d}:}. + +Some people use the term ``pathname'' for file names, but we do not; +we use the word ``path'' only in the term ``search path'' (q.v.@:). + +@item File-Name Component +A file-name component names a file directly within a particular +directory. On GNU and Unix systems, a file name is a sequence of +file-name components, separated by slashes. For example, @file{foo/bar} +is a file name containing two components, @samp{foo} and @samp{bar}; it +refers to the file named @samp{bar} in the directory named @samp{foo} in +the current directory. MS-DOS/MS-Windows file names can also use +backslashes to separate components, as in @file{foo\bar}. + +@item Fill Prefix +The fill prefix is a string that should be expected at the beginning +of each line when filling is done. It is not regarded as part of the +text to be filled. @xref{Filling}. + +@item Filling +Filling text means shifting text between consecutive lines so that all +the lines are approximately the same length. @xref{Filling}. Some +other editors call this feature `line wrapping.' + +@item Font Lock +Font Lock is a mode that highlights parts of buffer text according to +its syntax. @xref{Font Lock}. + +@item Fontset +A fontset is a named collection of fonts. A fontset specification lists +character sets and which font to use to display each of them. Fontsets +make it easy to change several fonts at once by specifying the name of a +fontset, rather than changing each font separately. @xref{Fontsets}. + +@item Formatted Text +Formatted text is text that displays with formatting information while +you edit. Formatting information includes fonts, colors, and specified +margins. @xref{Formatted Text}. + +@item Formfeed Character +See `page.' + +@item Frame +A frame is a rectangular cluster of Emacs windows. Emacs starts out +with one frame, but you can create more. You can subdivide each frame +into Emacs windows (q.v.@:). When you are using a window system +(q.v.@:), all the frames can be visible at the same time. +@xref{Frames}. Some other editors use the term ``window'' for this, +but in Emacs a window means something else. + +@item Fringe +On a graphical display (q.v.@:), there's a narrow portion of the +frame (q.v.@:) between the text area and the window's border. Emacs +displays the fringe using a special face (q.v.@:) called +@code{fringe}. @xref{Faces,fringe}. + +@item FTP +FTP is an acronym for File Transfer Protocol. Emacs uses an FTP client +program to provide access to remote files (q.v.@:). + +@item Function Key +A function key is a key on the keyboard that sends input but does not +correspond to any character. @xref{Function Keys}. + +@item Global +Global means ``independent of the current environment; in effect +throughout Emacs.'' It is the opposite of local (q.v.@:). Particular +examples of the use of `global' appear below. + +@item Global Abbrev +A global definition of an abbrev (q.v.@:) is effective in all major +modes that do not have local (q.v.@:) definitions for the same abbrev. +@xref{Abbrevs}. + +@item Global Keymap +The global keymap (q.v.@:) contains key bindings that are in effect +except when overridden by local key bindings in a major mode's local +keymap (q.v.@:). @xref{Keymaps}. + +@item Global Mark Ring +The global mark ring records the series of buffers you have recently +set a mark (q.v.@:) in. In many cases you can use this to backtrack +through buffers you have been editing in, or in which you have found +tags (see `tags table'). @xref{Global Mark Ring}. + +@item Global Substitution +Global substitution means replacing each occurrence of one string by +another string throughout a large amount of text. @xref{Replace}. + +@item Global Variable +The global value of a variable (q.v.@:) takes effect in all buffers +that do not have their own local (q.v.@:) values for the variable. +@xref{Variables}. + +@item Graphic Character +Graphic characters are those assigned pictorial images rather than +just names. All the non-Meta (q.v.@:) characters except for the +Control (q.v.@:) characters are graphic characters. These include +letters, digits, punctuation, and spaces; they do not include +@key{RET} or @key{ESC}. In Emacs, typing a graphic character inserts +that character (in ordinary editing modes). @xref{Inserting Text}. + +@item Graphical Display +A graphical display is one that can display images and multiple fonts. +Usually it also has a window system (q.v.@:). + +@item Highlighting +Highlighting text means displaying it with a different foreground and/or +background color to make it stand out from the rest of the text in the +buffer. + +Emacs uses highlighting in several ways. When you mark a region with +the mouse, the region is always highlighted. Optionally Emacs can +also highlight the region whenever it is active (@pxref{Transient +Mark}). Incremental search also highlights matches (@pxref{Incremental +Search}). See also `font lock'. + +@item Hardcopy +Hardcopy means printed output. Emacs has commands for making printed +listings of text in Emacs buffers. @xref{Printing}. + +@item @key{HELP} +@key{HELP} is the Emacs name for @kbd{C-h} or @key{F1}. You can type +@key{HELP} at any time to ask what options you have, or to ask what any +command does. @xref{Help}. + +@item Help Echo +Help echo is a short message displayed in the echo area when the mouse +pointer is located on portions of display that require some +explanations. Emacs displays help echo for menu items, parts of the +mode line, tool-bar buttons, etc. On graphics displays, the messages +can be displayed as tooltips (q.v.@:). @xref{Tooltips}. + +@item Hook +A hook is a list of functions to be called on specific occasions, such +as saving a buffer in a file, major mode activation, etc. By +customizing the various hooks, you can modify Emacs's behavior without +changing any of its code. @xref{Hooks}. + +@item Hyper +Hyper is the name of a modifier bit which a keyboard input character may +have. To make a character Hyper, type it while holding down the +@key{HYPER} key. Such characters are given names that start with +@kbd{Hyper-} (usually written @kbd{H-} for short). @xref{User Input, +Hyper}. + +@item Iff +``Iff'' means ``if and only if.'' This terminology comes from +mathematics. Try to avoid using this term in documentation, since +many are unfamiliar with it and mistake it for a typo. + +@item Inbox +An inbox is a file in which mail is delivered by the operating system. +Rmail transfers mail from inboxes to Rmail files (q.v.@:) in which the +mail is then stored permanently or until explicitly deleted. +@xref{Rmail Inbox}. + +@item Incremental Search +Emacs provides an incremental search facility, whereby Emacs searches +for the string as you type it. @xref{Incremental Search}. + +@item Indentation +Indentation means blank space at the beginning of a line. Most +programming languages have conventions for using indentation to +illuminate the structure of the program, and Emacs has special +commands to adjust indentation. +@xref{Indentation}. + +@item Indirect Buffer +An indirect buffer is a buffer that shares the text of another buffer, +called its base buffer (q.v.@:). @xref{Indirect Buffers}. + +@item Info +Info is the hypertext format used by the GNU project for writing +documentation. + +@item Input Event +An input event represents, within Emacs, one action taken by the user on +the terminal. Input events include typing characters, typing function +keys, pressing or releasing mouse buttons, and switching between Emacs +frames. @xref{User Input}. + +@item Input Method +An input method is a system for entering non-@acronym{ASCII} text characters by +typing sequences of @acronym{ASCII} characters (q.v.@:). @xref{Input Methods}. + +@item Insertion +Insertion means copying text into the buffer, either from the keyboard +or from some other place in Emacs. + +@item Interlocking +Interlocking is a feature for warning when you start to alter a file +that someone else is already editing. +@xref{Interlocking,Interlocking,Simultaneous Editing}. + +@item Isearch +See `incremental search.' + +@item Justification +Justification means adding extra spaces within lines of text to make +them extend exactly to a specified width. +@xref{Format Justification}. + +@item Keybinding +See `binding.' + +@item Keyboard Macro +Keyboard macros are a way of defining new Emacs commands from +sequences of existing ones, with no need to write a Lisp program. +@xref{Keyboard Macros}. + +@cindex keyboard shortcuts +@item Keyboard Shortcut +A keyboard shortcut is a key sequence (q.v.@:) which invokes a +command. What some programs call ``assigning a keyboard shortcut,'' +Emacs calls ``binding a key sequence.'' See `binding.' + +@item Key Sequence +A key sequence (key, for short) is a sequence of input events (q.v.@:) +that are meaningful as a single unit. If the key sequence is enough to +specify one action, it is a complete key (q.v.@:); if it is not enough, +it is a prefix key (q.v.@:). @xref{Keys}. + +@item Keymap +The keymap is the data structure that records the bindings (q.v.@:) of +key sequences to the commands that they run. For example, the global +keymap binds the character @kbd{C-n} to the command function +@code{next-line}. @xref{Keymaps}. + +@item Keyboard Translation Table +The keyboard translation table is an array that translates the character +codes that come from the terminal into the character codes that make up +key sequences. + +@item Kill Ring +The kill ring is where all text you have killed recently is saved. +You can reinsert any of the killed text still in the ring; this is +called yanking (q.v.@:). @xref{Yanking}. + +@item Killing +Killing means erasing text and saving it on the kill ring so it can be +yanked (q.v.@:) later. Some other systems call this ``cutting.'' +Most Emacs commands that erase text perform killing, as opposed to +deletion (q.v.@:). @xref{Killing}. + +@item Killing a Job +Killing a job (such as, an invocation of Emacs) means making it cease +to exist. Any data within it, if not saved in a file, is lost. +@xref{Exiting}. + +@item Language Environment +Your choice of language environment specifies defaults for the input +method (q.v.@:) and coding system (q.v.@:). @xref{Language +Environments}. These defaults are relevant if you edit non-@acronym{ASCII} text +(@pxref{International}). + +@item Line Wrapping +See `filling.' + +@item Lisp +Lisp is a programming language. Most of Emacs is written in a dialect +of Lisp, called Emacs Lisp, that is extended with special features which +make it especially suitable for text editing tasks. + +@item List +A list is, approximately, a text string beginning with an open +parenthesis and ending with the matching close parenthesis. In C mode +and other non-Lisp modes, groupings surrounded by other kinds of matched +delimiters appropriate to the language, such as braces, are also +considered lists. Emacs has special commands for many operations on +lists. @xref{Moving by Parens}. + +@item Local +Local means ``in effect only in a particular context''; the relevant +kind of context is a particular function execution, a particular +buffer, or a particular major mode. It is the opposite of `global' +(q.v.@:). Specific uses of `local' in Emacs terminology appear below. + +@item Local Abbrev +A local abbrev definition is effective only if a particular major mode +is selected. In that major mode, it overrides any global definition +for the same abbrev. @xref{Abbrevs}. + +@item Local Keymap +A local keymap is used in a particular major mode; the key bindings +(q.v.@:) in the current local keymap override global bindings of the +same key sequences. @xref{Keymaps}. + +@item Local Variable +A local value of a variable (q.v.@:) applies to only one buffer. +@xref{Locals}. + +@item @kbd{M-} +@kbd{M-} in the name of a character is an abbreviation for @key{META}, +one of the modifier keys that can accompany any character. +@xref{User Input,M-}. + +@item @kbd{M-C-} +@kbd{M-C-} in the name of a character is an abbreviation for +Control-Meta; it means the same thing as @kbd{C-M-}. If your +terminal lacks a real @key{META} key, you type a Control-Meta character by +typing @key{ESC} and then typing the corresponding Control character. +@xref{User Input,C-M-}. + +@item @kbd{M-x} +@kbd{M-x} is the key sequence which is used to call an Emacs command by +name. This is how you run commands that are not bound to key sequences. +@xref{M-x,M-x,Running Commands by Name}. + +@item Mail +Mail means messages sent from one user to another through the computer +system, to be read at the recipient's convenience. Emacs has commands for +composing and sending mail, and for reading and editing the mail you have +received. @xref{Sending Mail}. @xref{Rmail}, for how to read mail. + +@item Mail Composition Method +A mail composition method is a program runnable within Emacs for editing +and sending a mail message. Emacs lets you select from several +alternative mail composition methods. @xref{Mail Methods}. + +@item Major Mode +The Emacs major modes are a mutually exclusive set of options, each of +which configures Emacs for editing a certain sort of text. Ideally, +each programming language has its own major mode. @xref{Major Modes}. + +@item Margin +The space between the usable part of a window (including the +fringe) and the window edge. + +@item Mark +The mark points to a position in the text. It specifies one end of the +region (q.v.@:), point being the other end. Many commands operate on +all the text from point to the mark. Each buffer has its own mark. +@xref{Mark}. + +@item Mark Ring +The mark ring is used to hold several recent previous locations of the +mark, just in case you want to move back to them. Each buffer has its +own mark ring; in addition, there is a single global mark ring (q.v.@:). +@xref{Mark Ring}. + +@item Menu Bar +The menu bar is the line at the top of an Emacs frame. It contains +words you can click on with the mouse to bring up menus, or you can use +a keyboard interface to navigate it. @xref{Menu Bars}. + +@item Message +See `mail.' + +@item Meta +Meta is the name of a modifier bit which you can use in a command +character. To enter a meta character, you hold down the @key{META} +key while typing the character. We refer to such characters with +names that start with @kbd{Meta-} (usually written @kbd{M-} for +short). For example, @kbd{M-<} is typed by holding down @key{META} +and at the same time typing @kbd{<} (which itself is done, on most +terminals, by holding down @key{SHIFT} and typing @kbd{,}). +@xref{User Input,Meta}. + +On some terminals, the @key{META} key is actually labeled @key{ALT} +or @key{EDIT}. + +@item Meta Character +A Meta character is one whose character code includes the Meta bit. + +@item Minibuffer +The minibuffer is the window that appears when necessary inside the +echo area (q.v.@:), used for reading arguments to commands. +@xref{Minibuffer}. + +@item Minibuffer History +The minibuffer history records the text you have specified in the past +for minibuffer arguments, so you can conveniently use the same text +again. @xref{Minibuffer History}. + +@item Minor Mode +A minor mode is an optional feature of Emacs which can be switched on +or off independently of all other features. Each minor mode has a +command to turn it on or off. @xref{Minor Modes}. + +@item Minor Mode Keymap +A minor mode keymap is a keymap that belongs to a minor mode and is +active when that mode is enabled. Minor mode keymaps take precedence +over the buffer's local keymap, just as the local keymap takes +precedence over the global keymap. @xref{Keymaps}. + +@item Mode Line +The mode line is the line at the bottom of each window (q.v.@:), giving +status information on the buffer displayed in that window. @xref{Mode +Line}. + +@item Modified Buffer +A buffer (q.v.@:) is modified if its text has been changed since the +last time the buffer was saved (or since when it was created, if it +has never been saved). @xref{Saving}. + +@item Moving Text +Moving text means erasing it from one place and inserting it in +another. The usual way to move text is by killing (q.v.@:) it and then +yanking (q.v.@:) it. @xref{Killing}. + +@item MULE +MULE refers to the Emacs features for editing multilingual non-@acronym{ASCII} text +using multibyte characters (q.v.@:). @xref{International}. + +@item Multibyte Character +A multibyte character is a character that takes up several bytes in a +buffer. Emacs uses multibyte characters to represent non-@acronym{ASCII} text, +since the number of non-@acronym{ASCII} characters is much more than 256. +@xref{International Chars, International Characters}. + +@item Named Mark +A named mark is a register (q.v.@:) in its role of recording a +location in text so that you can move point to that location. +@xref{Registers}. + +@item Narrowing +Narrowing means creating a restriction (q.v.@:) that limits editing in +the current buffer to only a part of the text in the buffer. Text +outside that part is inaccessible for editing until the boundaries are +widened again, but it is still there, and saving the file saves it +all. @xref{Narrowing}. + +@item Newline +Control-J characters in the buffer terminate lines of text and are +therefore also called newlines. @xref{Text Characters,Newline}. + +@cindex nil +@cindex t +@item @code{nil} +@code{nil} is a value usually interpreted as a logical ``false.'' Its +opposite is @code{t}, interpreted as ``true.'' + +@item Numeric Argument +A numeric argument is a number, specified before a command, to change +the effect of the command. Often the numeric argument serves as a +repeat count. @xref{Arguments}. + +@item Overwrite Mode +Overwrite mode is a minor mode. When it is enabled, ordinary text +characters replace the existing text after point rather than pushing +it to the right. @xref{Minor Modes}. + +@item Page +A page is a unit of text, delimited by formfeed characters (@acronym{ASCII} +control-L, code 014) coming at the beginning of a line. Some Emacs +commands are provided for moving over and operating on pages. +@xref{Pages}. + +@item Paragraph +Paragraphs are the medium-size unit of human-language text. There are +special Emacs commands for moving over and operating on paragraphs. +@xref{Paragraphs}. + +@item Parsing +We say that certain Emacs commands parse words or expressions in the +text being edited. Really, all they know how to do is find the other +end of a word or expression. @xref{Syntax}. + +@item Point +Point is the place in the buffer at which insertion and deletion +occur. Point is considered to be between two characters, not at one +character. The terminal's cursor (q.v.@:) indicates the location of +point. @xref{Point}. + +@item Prefix Argument +See `numeric argument.' + +@item Prefix Key +A prefix key is a key sequence (q.v.@:) whose sole function is to +introduce a set of longer key sequences. @kbd{C-x} is an example of +prefix key; any two-character sequence starting with @kbd{C-x} is +therefore a legitimate key sequence. @xref{Keys}. + +@item Primary Rmail File +Your primary Rmail file is the file named @samp{RMAIL} in your home +directory. That's where Rmail stores your incoming mail, unless you +specify a different file name. @xref{Rmail}. + +@item Primary Selection +The primary selection is one particular X selection (q.v.@:); it is the +selection that most X applications use for transferring text to and from +other applications. + +The Emacs kill commands set the primary selection and the yank command +uses the primary selection when appropriate. @xref{Killing}. + +@item Prompt +A prompt is text used to ask the user for input. Displaying a prompt +is called prompting. Emacs prompts always appear in the echo area +(q.v.@:). One kind of prompting happens when the minibuffer is used to +read an argument (@pxref{Minibuffer}); the echoing which happens when +you pause in the middle of typing a multi-character key sequence is also +a kind of prompting (@pxref{Echo Area}). + +@item Query-Replace +Query-replace is an interactive string replacement feature provided by +Emacs. @xref{Query Replace}. + +@item Quitting +Quitting means canceling a partially typed command or a running +command, using @kbd{C-g} (or @kbd{C-@key{BREAK}} on MS-DOS). @xref{Quitting}. + +@item Quoting +Quoting means depriving a character of its usual special significance. +The most common kind of quoting in Emacs is with @kbd{C-q}. What +constitutes special significance depends on the context and on +convention. For example, an ``ordinary'' character as an Emacs command +inserts itself; so in this context, a special character is any character +that does not normally insert itself (such as @key{DEL}, for example), +and quoting it makes it insert itself as if it were not special. Not +all contexts allow quoting. @xref{Inserting Text,Quoting}. + +@item Quoting File Names +Quoting a file name turns off the special significance of constructs +such as @samp{$}, @samp{~} and @samp{:}. @xref{Quoted File Names}. + +@item Read-Only Buffer +A read-only buffer is one whose text you are not allowed to change. +Normally Emacs makes buffers read-only when they contain text which +has a special significance to Emacs; for example, Dired buffers. +Visiting a file that is write-protected also makes a read-only buffer. +@xref{Buffers}. + +@item Rectangle +A rectangle consists of the text in a given range of columns on a given +range of lines. Normally you specify a rectangle by putting point at +one corner and putting the mark at the diagonally opposite corner. +@xref{Rectangles}. + +@item Recursive Editing Level +A recursive editing level is a state in which part of the execution of +a command involves asking you to edit some text. This text may +or may not be the same as the text to which the command was applied. +The mode line indicates recursive editing levels with square brackets +(@samp{[} and @samp{]}). @xref{Recursive Edit}. + +@item Redisplay +Redisplay is the process of correcting the image on the screen to +correspond to changes that have been made in the text being edited. +@xref{Screen,Redisplay}. + +@item Regexp +See `regular expression.' + +@item Region +The region is the text between point (q.v.@:) and the mark (q.v.@:). +Many commands operate on the text of the region. @xref{Mark,Region}. + +@item Register +Registers are named slots in which text or buffer positions or +rectangles can be saved for later use. @xref{Registers}. A related +Emacs feature is `bookmarks' (q.v.@:). + +@item Regular Expression +A regular expression is a pattern that can match various text strings; +for example, @samp{a[0-9]+} matches @samp{a} followed by one or more +digits. @xref{Regexps}. + +@item Remote File +A remote file is a file that is stored on a system other than your own. +Emacs can access files on other computers provided that they are +connected to the same network as your machine, and (obviously) that +you have a supported method to gain access to those files. +@xref{Remote Files}. + +@item Repeat Count +See `numeric argument.' + +@item Replacement +See `global substitution.' + +@item Restriction +A buffer's restriction is the amount of text, at the beginning or the +end of the buffer, that is temporarily inaccessible. Giving a buffer a +nonzero amount of restriction is called narrowing (q.v.@:); removing +a restriction is called widening (q.v.@:). @xref{Narrowing}. + +@item @key{RET} +@key{RET} is a character that in Emacs runs the command to insert a +newline into the text. It is also used to terminate most arguments +read in the minibuffer (q.v.@:). @xref{User Input,Return}. + +@item Reverting +Reverting means returning to the original state. Emacs lets you +revert a buffer by re-reading its file from disk. @xref{Reverting}. + +@item Rmail File +An Rmail file is a file containing text in a special format used by +Rmail for storing mail. @xref{Rmail}. + +@item Saving +Saving a buffer means copying its text into the file that was visited +(q.v.@:) in that buffer. This is the way text in files actually gets +changed by your Emacs editing. @xref{Saving}. + +@item Scroll Bar +A scroll bar is a tall thin hollow box that appears at the side of a +window. You can use mouse commands in the scroll bar to scroll the +window. The scroll bar feature is supported only under windowing +systems. @xref{Scroll Bars}. + +@item Scrolling +Scrolling means shifting the text in the Emacs window so as to see a +different part of the buffer. @xref{Scrolling}. + +@item Searching +Searching means moving point to the next occurrence of a specified +string or the next match for a specified regular expression. +@xref{Search}. + +@item Search Path +A search path is a list of directory names, to be used for searching for +files for certain purposes. For example, the variable @code{load-path} +holds a search path for finding Lisp library files. @xref{Lisp Libraries}. + +@item Secondary Selection +The secondary selection is one particular X selection; some X +applications can use it for transferring text to and from other +applications. Emacs has special mouse commands for transferring text +using the secondary selection. @xref{Secondary Selection}. + +@item Selected Frame +The selected frame is the one your input currently operates on. +@xref{Frames}. + +@item Selected Window +The selected frame is the one your input currently operates on. +@xref{Basic Window}. + +@item Selecting a Buffer +Selecting a buffer means making it the current (q.v.@:) buffer. +@xref{Select Buffer}. + +@item Selection +Windowing systems allow an application program to specify +selections whose values are text. A program can also read the +selections that other programs have set up. This is the principal way +of transferring text between window applications. Emacs has commands to +work with the primary (q.v.@:) selection and the secondary (q.v.@:) +selection, and also with the clipboard (q.v.@:). + +@item Self-Documentation +Self-documentation is the feature of Emacs which can tell you what any +command does, or give you a list of all commands related to a topic +you specify. You ask for self-documentation with the help character, +@kbd{C-h}. @xref{Help}. + +@item Self-Inserting Character +A character is self-inserting if typing that character inserts that +character in the buffer. Ordinary printing and whitespace characters +are self-inserting in Emacs, except in certain special major modes. + +@item Sentences +Emacs has commands for moving by or killing by sentences. +@xref{Sentences}. + +@item Sexp +A sexp (short for ``s-expression'') is the basic syntactic unit of +Lisp in its textual form: either a list, or Lisp atom. Sexps are also +the balanced expressions (q.v.@:) of the Lisp language; this is why +the commands for editing balanced expressions have `sexp' in their +name. @xref{Expressions,Sexps}. + +@item Simultaneous Editing +Simultaneous editing means two users modifying the same file at once. +Simultaneous editing, if not detected, can cause one user to lose his +or her work. Emacs detects all cases of simultaneous editing, and +warns one of the users to investigate. +@xref{Interlocking,Interlocking,Simultaneous Editing}. + +@item @key{SPC} +@key{SPC} is the space character, which you enter by pressing the +space bar. + +@item Speedbar +The speedbar is a special tall frame that provides fast access to Emacs +buffers, functions within those buffers, Info nodes, and other +interesting parts of text within Emacs. @xref{Speedbar}. + +@item Spell Checking +Spell checking means checking correctness of the written form of each +one of the words in a text. Emacs uses the Ispell spelling-checker +program to check the spelling of parts of a buffer via a convenient user +interface. @xref{Spelling}. + +@item String +A string is a kind of Lisp data object which contains a sequence of +characters. Many Emacs variables are intended to have strings as +values. The Lisp syntax for a string consists of the characters in the +string with a @samp{"} before and another @samp{"} after. A @samp{"} +that is part of the string must be written as @samp{\"} and a @samp{\} +that is part of the string must be written as @samp{\\}. All other +characters, including newline, can be included just by writing them +inside the string; however, backslash sequences as in C, such as +@samp{\n} for newline or @samp{\241} using an octal character code, are +allowed as well. + +@item String Substitution +See `global substitution'. + +@item Syntax Highlighting +See `font lock.' + +@item Syntax Table +The syntax table tells Emacs which characters are part of a word, +which characters balance each other like parentheses, etc. +@xref{Syntax}. + +@item Super +Super is the name of a modifier bit which a keyboard input character may +have. To make a character Super, type it while holding down the +@key{SUPER} key. Such characters are given names that start with +@kbd{Super-} (usually written @kbd{s-} for short). @xref{User Input, +Super}. + +@item Suspending +Suspending Emacs means stopping it temporarily and returning control +to its parent process, which is usually a shell. Unlike killing a job +(q.v.@:), you can later resume the suspended Emacs job without losing +your buffers, unsaved edits, undo history, etc. @xref{Exiting}. + +@item @key{TAB} +@key{TAB} is the tab character. In Emacs it is typically used for +indentation or completion. + +@item Tags Table +A tags table is a file that serves as an index to the function +definitions in one or more other files. @xref{Tags}. + +@item Termscript File +A termscript file contains a record of all characters sent by Emacs to +the terminal. It is used for tracking down bugs in Emacs redisplay. +Emacs does not make a termscript file unless you tell it to. +@xref{Bugs}. + +@item Text +`Text' has two meanings (@pxref{Text}): + +@itemize @bullet +@item +Data consisting of a sequence of characters, as opposed to binary +numbers, executable programs, and the like. The basic contents of an +Emacs buffer (aside from the text properties, q.v.@:) are always text +in this sense. +@item +Data consisting of written human language, as opposed to programs, +or following the stylistic conventions of human language. +@end itemize + +@item Text-only Terminal +A text-only terminal is a display that is limited to displaying text in +character units. Such a terminal cannot control individual pixels it +displays. Emacs supports a subset of display features on text-only +terminals. + +@item Text Properties +Text properties are annotations recorded for particular characters in +the buffer. Images in the buffer are recorded as text properties; +they also specify formatting information. @xref{Editing Format Info}. + +@item Tool Bar +The tool bar is a line (sometimes multiple lines) of icons at the top +of an Emacs frame. Clicking on one of these icons executes a command. +You can think of this as a graphical relative of the menu bar (q.v.@:). +@xref{Tool Bars}. + +@item Tooltips +Tooltips are small windows displaying a help echo (q.v.@:) text that +explains parts of the display, lists useful options available via mouse +clicks, etc. @xref{Tooltips}. + +@item Top Level +Top level is the normal state of Emacs, in which you are editing the +text of the file you have visited. You are at top level whenever you +are not in a recursive editing level (q.v.@:) or the minibuffer +(q.v.@:), and not in the middle of a command. You can get back to top +level by aborting (q.v.@:) and quitting (q.v.@:). @xref{Quitting}. + +@item Transposition +Transposing two units of text means putting each one into the place +formerly occupied by the other. There are Emacs commands to transpose +two adjacent characters, words, balanced expressions (q.v.@:) or lines +(@pxref{Transpose}). + +@item Truncation +Truncating text lines in the display means leaving out any text on a +line that does not fit within the right margin of the window +displaying it. See also `continuation line.' +@xref{Continuation Lines,Truncation}. + +@item TTY +See `text-only terminal.' + +@item Undoing +Undoing means making your previous editing go in reverse, bringing +back the text that existed earlier in the editing session. +@xref{Undo}. + +@item User Option +A user option is a face (q.v.@:) or a variable (q.v.@:) that exists so +that you can customize Emacs by setting it to a new value. +@xref{Easy Customization}. + +@item Variable +A variable is an object in Lisp that can store an arbitrary value. +Emacs uses some variables for internal purposes, and has others (known +as `user options' (q.v.@:)) just so that you can set their values to +control the behavior of Emacs. The variables used in Emacs that you +are likely to be interested in are listed in the Variables Index in +this manual (@pxref{Variable Index}). @xref{Variables}, for +information on variables. + +@item Version Control +Version control systems keep track of multiple versions of a source file. +They provide a more powerful alternative to keeping backup files (q.v.@:). +@xref{Version Control}. + +@item Visiting +Visiting a file means loading its contents into a buffer (q.v.@:) +where they can be edited. @xref{Visiting}. + +@item Whitespace +Whitespace is any run of consecutive formatting characters (space, +tab, newline, and backspace). + +@item Widening +Widening is removing any restriction (q.v.@:) on the current buffer; +it is the opposite of narrowing (q.v.@:). @xref{Narrowing}. + +@item Window +Emacs divides a frame (q.v.@:) into one or more windows, each of which +can display the contents of one buffer (q.v.@:) at any time. +@xref{Screen}, for basic information on how Emacs uses the screen. +@xref{Windows}, for commands to control the use of windows. Some +other editors use the term ``window'' for what we call a `frame' +(q.v.@:) in Emacs. + +@item Window System +A window system is software that operates on a graphical display +(q.v.@:), to subdivide the screen so that multiple applications can +have their] own windows at the same time. All modern operating systems +include a window system. + +@item Word Abbrev +See `abbrev.' + +@item Word Search +Word search is searching for a sequence of words, considering the +punctuation between them as insignificant. @xref{Word Search}. + +@item WYSIWYG +WYSIWYG stands for ``What you see is what you get.'' Emacs generally +provides WYSIWYG editing for files of characters; in Enriched mode +(@pxref{Formatted Text}), it provides WYSIWYG editing for files that +include text formatting information. + +@item Yanking +Yanking means reinserting text previously killed. It can be used to +undo a mistaken kill, or for copying or moving text. Some other +systems call this ``pasting.'' @xref{Yanking}. +@end table + +@ignore + arch-tag: 0dd53ce1-5f09-4ac2-b13b-cf22b0f28d23 +@end ignore diff --git a/doc/emacs/gnu.texi b/doc/emacs/gnu.texi new file mode 100644 index 00000000000..1cf85f41c3c --- /dev/null +++ b/doc/emacs/gnu.texi @@ -0,0 +1,567 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1995, 2001, 2002, 2003, 2004, +@c 2005, 2006, 2007 Free Software Foundation, Inc. +@ifclear justgnu +@node Manifesto,, Microsoft Windows, Top +@unnumbered The GNU Manifesto +@end ifclear +@ifset justgnu +Copyright @copyright{} 1985, 1993, 2001, 2002, 2003, 2004, +2005, 2006, 2007 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover texts being ``A GNU +Manual'', and with the Back-Cover Texts as in (a) below. A copy of the +license is included in the section entitled ``GNU Free Documentation +License'' in the Emacs manual. + +(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify +this GNU Manual, like GNU software. Copies published by the Free +Software Foundation raise funds for GNU development.'' + +This document is part of a collection distributed under the GNU Free +Documentation License. If you want to distribute this document +separately from the collection, you can do so by adding a copy of the +license to the document, as described in section 6 of the license. + +@node Top +@top The GNU Manifesto +@end ifset + +@quotation +The GNU Manifesto which appears below was written by Richard Stallman at +the beginning of the GNU project, to ask for participation and support. +For the first few years, it was updated in minor ways to account for +developments, but now it seems best to leave it unchanged as most people +have seen it. + +Since that time, we have learned about certain common misunderstandings +that different wording could help avoid. Footnotes added in 1993 help +clarify these points. + +For up-to-date information about available GNU software, please see +our web site, @uref{http://www.gnu.org}. For software tasks and other +ways to contribute, see @uref{http://www.gnu.org/help}. +@end quotation + +@unnumberedsec What's GNU? Gnu's Not Unix! + +GNU, which stands for Gnu's Not Unix, is the name for the complete +Unix-compatible software system which I am writing so that I can give it +away free to everyone who can use it.@footnote{The wording here was +careless. The intention was that nobody would have to pay for +@emph{permission} to use the GNU system. But the words don't make this +clear, and people often interpret them as saying that copies of GNU +should always be distributed at little or no charge. That was never the +intent; later on, the manifesto mentions the possibility of companies +providing the service of distribution for a profit. Subsequently I have +learned to distinguish carefully between ``free'' in the sense of +freedom and ``free'' in the sense of price. Free software is software +that users have the freedom to distribute and change. Some users may +obtain copies at no charge, while others pay to obtain copies---and if +the funds help support improving the software, so much the better. The +important thing is that everyone who has a copy has the freedom to +cooperate with others in using it.} Several other volunteers are helping +me. Contributions of time, money, programs and equipment are greatly +needed. + +So far we have an Emacs text editor with Lisp for writing editor commands, +a source level debugger, a yacc-compatible parser generator, a linker, and +around 35 utilities. A shell (command interpreter) is nearly completed. A +new portable optimizing C compiler has compiled itself and may be released +this year. An initial kernel exists but many more features are needed to +emulate Unix. When the kernel and compiler are finished, it will be +possible to distribute a GNU system suitable for program development. We +will use @TeX{} as our text formatter, but an nroff is being worked on. We +will use the free, portable X window system as well. After this we will +add a portable Common Lisp, an Empire game, a spreadsheet, and hundreds of +other things, plus on-line documentation. We hope to supply, eventually, +everything useful that normally comes with a Unix system, and more. + +GNU will be able to run Unix programs, but will not be identical to Unix. +We will make all improvements that are convenient, based on our experience +with other operating systems. In particular, we plan to have longer +file names, file version numbers, a crashproof file system, file name +completion perhaps, terminal-independent display support, and perhaps +eventually a Lisp-based window system through which several Lisp programs +and ordinary Unix programs can share a screen. Both C and Lisp will be +available as system programming languages. We will try to support UUCP, +MIT Chaosnet, and Internet protocols for communication. + +GNU is aimed initially at machines in the 68000/16000 class with virtual +memory, because they are the easiest machines to make it run on. The extra +effort to make it run on smaller machines will be left to someone who wants +to use it on them. + +To avoid horrible confusion, please pronounce the `G' in the word `GNU' +when it is the name of this project. + +@unnumberedsec Why I Must Write GNU + +I consider that the golden rule requires that if I like a program I must +share it with other people who like it. Software sellers want to divide +the users and conquer them, making each user agree not to share with +others. I refuse to break solidarity with other users in this way. I +cannot in good conscience sign a nondisclosure agreement or a software +license agreement. For years I worked within the Artificial Intelligence +Lab to resist such tendencies and other inhospitalities, but eventually +they had gone too far: I could not remain in an institution where such +things are done for me against my will. + +So that I can continue to use computers without dishonor, I have decided to +put together a sufficient body of free software so that I will be able to +get along without any software that is not free. I have resigned from the +AI lab to deny MIT any legal excuse to prevent me from giving GNU away. + +@unnumberedsec Why GNU Will Be Compatible with Unix + +Unix is not my ideal system, but it is not too bad. The essential features +of Unix seem to be good ones, and I think I can fill in what Unix lacks +without spoiling them. And a system compatible with Unix would be +convenient for many other people to adopt. + +@unnumberedsec How GNU Will Be Available + +GNU is not in the public domain. Everyone will be permitted to modify and +redistribute GNU, but no distributor will be allowed to restrict its +further redistribution. That is to say, proprietary modifications will not +be allowed. I want to make sure that all versions of GNU remain free. + +@unnumberedsec Why Many Other Programmers Want to Help + +I have found many other programmers who are excited about GNU and want to +help. + +Many programmers are unhappy about the commercialization of system +software. It may enable them to make more money, but it requires them to +feel in conflict with other programmers in general rather than feel as +comrades. The fundamental act of friendship among programmers is the +sharing of programs; marketing arrangements now typically used essentially +forbid programmers to treat others as friends. The purchaser of software +must choose between friendship and obeying the law. Naturally, many decide +that friendship is more important. But those who believe in law often do +not feel at ease with either choice. They become cynical and think that +programming is just a way of making money. + +By working on and using GNU rather than proprietary programs, we can be +hospitable to everyone and obey the law. In addition, GNU serves as an +example to inspire and a banner to rally others to join us in sharing. +This can give us a feeling of harmony which is impossible if we use +software that is not free. For about half the programmers I talk to, this +is an important happiness that money cannot replace. + +@unnumberedsec How You Can Contribute + +I am asking computer manufacturers for donations of machines and money. +I'm asking individuals for donations of programs and work. + +One consequence you can expect if you donate machines is that GNU will run +on them at an early date. The machines should be complete, ready to use +systems, approved for use in a residential area, and not in need of +sophisticated cooling or power. + +I have found very many programmers eager to contribute part-time work for +GNU. For most projects, such part-time distributed work would be very hard +to coordinate; the independently-written parts would not work together. +But for the particular task of replacing Unix, this problem is absent. A +complete Unix system contains hundreds of utility programs, each of which +is documented separately. Most interface specifications are fixed by Unix +compatibility. If each contributor can write a compatible replacement for +a single Unix utility, and make it work properly in place of the original +on a Unix system, then these utilities will work right when put together. +Even allowing for Murphy to create a few unexpected problems, assembling +these components will be a feasible task. (The kernel will require closer +communication and will be worked on by a small, tight group.) + +If I get donations of money, I may be able to hire a few people full or +part time. The salary won't be high by programmers' standards, but I'm +looking for people for whom building community spirit is as important as +making money. I view this as a way of enabling dedicated people to devote +their full energies to working on GNU by sparing them the need to make a +living in another way. + +@unnumberedsec Why All Computer Users Will Benefit + +Once GNU is written, everyone will be able to obtain good system +software free, just like air.@footnote{This is another place I failed to +distinguish carefully between the two different meanings of ``free.'' +The statement as it stands is not false---you can get copies of GNU +software at no charge, from your friends or over the net. But it does +suggest the wrong idea.} + +This means much more than just saving everyone the price of a Unix license. +It means that much wasteful duplication of system programming effort will +be avoided. This effort can go instead into advancing the state of the +art. + +Complete system sources will be available to everyone. As a result, a user +who needs changes in the system will always be free to make them himself, +or hire any available programmer or company to make them for him. Users +will no longer be at the mercy of one programmer or company which owns the +sources and is in sole position to make changes. + +Schools will be able to provide a much more educational environment by +encouraging all students to study and improve the system code. Harvard's +computer lab used to have the policy that no program could be installed on +the system if its sources were not on public display, and upheld it by +actually refusing to install certain programs. I was very much inspired by +this. + +Finally, the overhead of considering who owns the system software and what +one is or is not entitled to do with it will be lifted. + +Arrangements to make people pay for using a program, including licensing of +copies, always incur a tremendous cost to society through the cumbersome +mechanisms necessary to figure out how much (that is, which programs) a +person must pay for. And only a police state can force everyone to obey +them. Consider a space station where air must be manufactured at great +cost: charging each breather per liter of air may be fair, but wearing the +metered gas mask all day and all night is intolerable even if everyone can +afford to pay the air bill. And the TV cameras everywhere to see if you +ever take the mask off are outrageous. It's better to support the air +plant with a head tax and chuck the masks. + +Copying all or parts of a program is as natural to a programmer as +breathing, and as productive. It ought to be as free. + +@unnumberedsec Some Easily Rebutted Objections to GNU's Goals + +@quotation +``Nobody will use it if it is free, because that means they can't rely +on any support.'' + +``You have to charge for the program to pay for providing the +support.'' +@end quotation + +If people would rather pay for GNU plus service than get GNU free without +service, a company to provide just service to people who have obtained GNU +free ought to be profitable.@footnote{Several such companies now exist.} + +We must distinguish between support in the form of real programming work +and mere handholding. The former is something one cannot rely on from a +software vendor. If your problem is not shared by enough people, the +vendor will tell you to get lost. + +If your business needs to be able to rely on support, the only way is to +have all the necessary sources and tools. Then you can hire any available +person to fix your problem; you are not at the mercy of any individual. +With Unix, the price of sources puts this out of consideration for most +businesses. With GNU this will be easy. It is still possible for there to +be no available competent person, but this problem cannot be blamed on +distribution arrangements. GNU does not eliminate all the world's problems, +only some of them. + +Meanwhile, the users who know nothing about computers need handholding: +doing things for them which they could easily do themselves but don't know +how. + +Such services could be provided by companies that sell just hand-holding +and repair service. If it is true that users would rather spend money and +get a product with service, they will also be willing to buy the service +having got the product free. The service companies will compete in quality +and price; users will not be tied to any particular one. Meanwhile, those +of us who don't need the service should be able to use the program without +paying for the service. + +@quotation +``You cannot reach many people without advertising, +and you must charge for the program to support that.'' + +``It's no use advertising a program people can get free.'' +@end quotation + +There are various forms of free or very cheap publicity that can be used to +inform numbers of computer users about something like GNU. But it may be +true that one can reach more microcomputer users with advertising. If this +is really so, a business which advertises the service of copying and +mailing GNU for a fee ought to be successful enough to pay for its +advertising and more. This way, only the users who benefit from the +advertising pay for it. + +On the other hand, if many people get GNU from their friends, and such +companies don't succeed, this will show that advertising was not really +necessary to spread GNU. Why is it that free market advocates don't +want to let the free market decide this?@footnote{The Free Software +Foundation raises most of its funds from a distribution service, +although it is a charity rather than a company. If @emph{no one} +chooses to obtain copies by ordering from the FSF, it will be unable +to do its work. But this does not mean that proprietary restrictions +are justified to force every user to pay. If a small fraction of all +the users order copies from the FSF, that is sufficient to keep the FSF +afloat. So we ask users to choose to support us in this way. Have you +done your part?} + +@quotation +``My company needs a proprietary operating system +to get a competitive edge.'' +@end quotation + +GNU will remove operating system software from the realm of competition. +You will not be able to get an edge in this area, but neither will your +competitors be able to get an edge over you. You and they will compete in +other areas, while benefiting mutually in this one. If your business is +selling an operating system, you will not like GNU, but that's tough on +you. If your business is something else, GNU can save you from being +pushed into the expensive business of selling operating systems. + +I would like to see GNU development supported by gifts from many +manufacturers and users, reducing the cost to each.@footnote{A group of +computer companies recently pooled funds to support maintenance of the +GNU C Compiler.} + +@quotation +``Don't programmers deserve a reward for their creativity?'' +@end quotation + +If anything deserves a reward, it is social contribution. Creativity can +be a social contribution, but only in so far as society is free to use the +results. If programmers deserve to be rewarded for creating innovative +programs, by the same token they deserve to be punished if they restrict +the use of these programs. + +@quotation +``Shouldn't a programmer be able to ask for a reward for his creativity?'' +@end quotation + +There is nothing wrong with wanting pay for work, or seeking to maximize +one's income, as long as one does not use means that are destructive. But +the means customary in the field of software today are based on +destruction. + +Extracting money from users of a program by restricting their use of it is +destructive because the restrictions reduce the amount and the ways that +the program can be used. This reduces the amount of wealth that humanity +derives from the program. When there is a deliberate choice to restrict, +the harmful consequences are deliberate destruction. + +The reason a good citizen does not use such destructive means to become +wealthier is that, if everyone did so, we would all become poorer from the +mutual destructiveness. This is Kantian ethics; or, the Golden Rule. +Since I do not like the consequences that result if everyone hoards +information, I am required to consider it wrong for one to do so. +Specifically, the desire to be rewarded for one's creativity does not +justify depriving the world in general of all or part of that creativity. + +@quotation +``Won't programmers starve?'' +@end quotation + +I could answer that nobody is forced to be a programmer. Most of us cannot +manage to get any money for standing on the street and making faces. But +we are not, as a result, condemned to spend our lives standing on the +street making faces, and starving. We do something else. + +But that is the wrong answer because it accepts the questioner's implicit +assumption: that without ownership of software, programmers cannot possibly +be paid a cent. Supposedly it is all or nothing. + +The real reason programmers will not starve is that it will still be +possible for them to get paid for programming; just not paid as much as +now. + +Restricting copying is not the only basis for business in software. It is +the most common basis because it brings in the most money. If it were +prohibited, or rejected by the customer, software business would move to +other bases of organization which are now used less often. There are +always numerous ways to organize any kind of business. + +Probably programming will not be as lucrative on the new basis as it is +now. But that is not an argument against the change. It is not considered +an injustice that sales clerks make the salaries that they now do. If +programmers made the same, that would not be an injustice either. (In +practice they would still make considerably more than that.) + +@quotation +``Don't people have a right to control how their creativity is used?'' +@end quotation + +``Control over the use of one's ideas'' really constitutes control over +other people's lives; and it is usually used to make their lives more +difficult. + +People who have studied the issue of intellectual property +rights@footnote{In the 80s I had not yet realized how confusing it was +to speak of ``the issue'' of ``intellectual property.'' That term is +obviously biased; more subtle is the fact that it lumps together +various disparate laws which raise very different issues. Nowadays I +urge people to reject the term ``intellectual property'' entirely, +lest it lead others to suppose that those laws form one coherent +issue. The way to be clear is to discuss patents, copyrights, and +trademarks separately. See +@uref{http://www.gnu.org/philosophy/not-ipr.xhtml} for more +explanation of how this term spreads confusion and bias.} carefully +(such as lawyers) say that there is no intrinsic right to intellectual +property. The kinds of supposed intellectual property rights that the +government recognizes were created by specific acts of legislation for +specific purposes. + +For example, the patent system was established to encourage inventors to +disclose the details of their inventions. Its purpose was to help society +rather than to help inventors. At the time, the life span of 17 years for +a patent was short compared with the rate of advance of the state of the +art. Since patents are an issue only among manufacturers, for whom the +cost and effort of a license agreement are small compared with setting up +production, the patents often do not do much harm. They do not obstruct +most individuals who use patented products. + +The idea of copyright did not exist in ancient times, when authors +frequently copied other authors at length in works of non-fiction. This +practice was useful, and is the only way many authors' works have survived +even in part. The copyright system was created expressly for the purpose +of encouraging authorship. In the domain for which it was +invented---books, which could be copied economically only on a printing +press---it did little harm, and did not obstruct most of the individuals +who read the books. + +All intellectual property rights are just licenses granted by society +because it was thought, rightly or wrongly, that society as a whole would +benefit by granting them. But in any particular situation, we have to ask: +are we really better off granting such license? What kind of act are we +licensing a person to do? + +The case of programs today is very different from that of books a hundred +years ago. The fact that the easiest way to copy a program is from one +neighbor to another, the fact that a program has both source code and +object code which are distinct, and the fact that a program is used rather +than read and enjoyed, combine to create a situation in which a person who +enforces a copyright is harming society as a whole both materially and +spiritually; in which a person should not do so regardless of whether the +law enables him to. + +@quotation +``Competition makes things get done better.'' +@end quotation + +The paradigm of competition is a race: by rewarding the winner, we +encourage everyone to run faster. When capitalism really works this way, +it does a good job; but its defenders are wrong in assuming it always works +this way. If the runners forget why the reward is offered and become +intent on winning, no matter how, they may find other strategies---such as, +attacking other runners. If the runners get into a fist fight, they will +all finish late. + +Proprietary and secret software is the moral equivalent of runners in a +fist fight. Sad to say, the only referee we've got does not seem to +object to fights; he just regulates them (``For every ten yards you run, +you can fire one shot''). He really ought to break them up, and penalize +runners for even trying to fight. + +@quotation +``Won't everyone stop programming without a monetary incentive?'' +@end quotation + +Actually, many people will program with absolutely no monetary incentive. +Programming has an irresistible fascination for some people, usually the +people who are best at it. There is no shortage of professional musicians +who keep at it even though they have no hope of making a living that way. + +But really this question, though commonly asked, is not appropriate to the +situation. Pay for programmers will not disappear, only become less. So +the right question is, will anyone program with a reduced monetary +incentive? My experience shows that they will. + +For more than ten years, many of the world's best programmers worked at the +Artificial Intelligence Lab for far less money than they could have had +anywhere else. They got many kinds of non-monetary rewards: fame and +appreciation, for example. And creativity is also fun, a reward in itself. + +Then most of them left when offered a chance to do the same interesting +work for a lot of money. + +What the facts show is that people will program for reasons other than +riches; but if given a chance to make a lot of money as well, they will +come to expect and demand it. Low-paying organizations do poorly in +competition with high-paying ones, but they do not have to do badly if the +high-paying ones are banned. + +@quotation +``We need the programmers desperately. If they demand that we +stop helping our neighbors, we have to obey.'' +@end quotation + +You're never so desperate that you have to obey this sort of demand. +Remember: millions for defense, but not a cent for tribute! + +@quotation +``Programmers need to make a living somehow.'' +@end quotation + +In the short run, this is true. However, there are plenty of ways that +programmers could make a living without selling the right to use a program. +This way is customary now because it brings programmers and businessmen the +most money, not because it is the only way to make a living. It is easy to +find other ways if you want to find them. Here are a number of examples. + +A manufacturer introducing a new computer will pay for the porting of +operating systems onto the new hardware. + +The sale of teaching, hand-holding and maintenance services could also +employ programmers. + +People with new ideas could distribute programs as +freeware@footnote{Subsequently we have discovered the need to +distinguish between ``free software'' and ``freeware''. The term +``freeware'' means software you are free to redistribute, but usually +you are not free to study and change the source code, so most of it is +not free software. See +@uref{http://www.gnu.org/philosophy/words-to-avoid.html} for more +explanation.}, asking for donations from satisfied users, or selling +hand-holding services. I have met people who are already working this +way successfully. + +Users with related needs can form users' groups, and pay dues. A group +would contract with programming companies to write programs that the +group's members would like to use. + +All sorts of development can be funded with a Software Tax: + +@quotation +Suppose everyone who buys a computer has to pay x percent of +the price as a software tax. The government gives this to +an agency like the NSF to spend on software development. + +But if the computer buyer makes a donation to software development +himself, he can take a credit against the tax. He can donate to +the project of his own choosing---often, chosen because he hopes to +use the results when it is done. He can take a credit for any amount +of donation up to the total tax he had to pay. + +The total tax rate could be decided by a vote of the payers of +the tax, weighted according to the amount they will be taxed on. + +The consequences: + +@itemize @bullet +@item +The computer-using community supports software development. +@item +This community decides what level of support is needed. +@item +Users who care which projects their share is spent on +can choose this for themselves. +@end itemize +@end quotation + +In the long run, making programs free is a step toward the post-scarcity +world, where nobody will have to work very hard just to make a living. +People will be free to devote themselves to activities that are fun, such +as programming, after spending the necessary ten hours a week on required +tasks such as legislation, family counseling, robot repair and asteroid +prospecting. There will be no need to be able to make a living from +programming. + +We have already greatly reduced the amount of work that the whole society +must do for its actual productivity, but only a little of this has +translated itself into leisure for workers because much nonproductive +activity is required to accompany productive activity. The main causes of +this are bureaucracy and isometric struggles against competition. Free +software will greatly reduce these drains in the area of software +production. We must do this, in order for technical gains in productivity +to translate into less work for us. + +@ignore + arch-tag: 21eb38f8-6fa0-480a-91cd-f3dab7148542 +@end ignore diff --git a/doc/emacs/gpl.texi b/doc/emacs/gpl.texi new file mode 100644 index 00000000000..5b416d3cb41 --- /dev/null +++ b/doc/emacs/gpl.texi @@ -0,0 +1,721 @@ +@c The GNU General Public License. +@center Version 3, 29 June 2007 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. + +@display +Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/} + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. +@end display + +@heading Preamble + +The GNU General Public License is a free, copyleft license for +software and other kinds of works. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom +to share and change all versions of a program---to make sure it remains +free software for all its users. We, the Free Software Foundation, +use the GNU General Public License for most of our software; it +applies also to any other work released this way by its authors. You +can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you +have certain responsibilities if you distribute copies of the +software, or if you modify it: responsibilities to respect the freedom +of others. + +For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, +receive or can get the source code. And you must show them these +terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + +Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the +manufacturer can do so. This is fundamentally incompatible with the +aim of protecting users' freedom to change the software. The +systematic pattern of such abuse occurs in the area of products for +individuals to use, which is precisely where it is most unacceptable. +Therefore, we have designed this version of the GPL to prohibit the +practice for those products. If such problems arise substantially in +other domains, we stand ready to extend this provision to those +domains in future versions of the GPL, as needed to protect the +freedom of users. + +Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish +to avoid the special danger that patents applied to a free program +could make it effectively proprietary. To prevent this, the GPL +assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and +modification follow. + +@heading TERMS AND CONDITIONS + +@enumerate 0 +@item Definitions. + +``This License'' refers to version 3 of the GNU General Public License. + +``Copyright'' also means copyright-like laws that apply to other kinds +of works, such as semiconductor masks. + +``The Program'' refers to any copyrightable work licensed under this +License. Each licensee is addressed as ``you''. ``Licensees'' and +``recipients'' may be individuals or organizations. + +To ``modify'' a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of +an exact copy. The resulting work is called a ``modified version'' of +the earlier work or a work ``based on'' the earlier work. + +A ``covered work'' means either the unmodified Program or a work based +on the Program. + +To ``propagate'' a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To ``convey'' a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user +through a computer network, with no transfer of a copy, is not +conveying. + +An interactive user interface displays ``Appropriate Legal Notices'' to +the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +@item Source Code. + +The ``source code'' for a work means the preferred form of the work for +making modifications to it. ``Object code'' means any non-source form +of a work. + +A ``Standard Interface'' means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The ``System Libraries'' of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +``Major Component'', in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The ``Corresponding Source'' for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can +regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same +work. + +@item Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, +without conditions so long as your license otherwise remains in force. +You may convey covered works to others for the sole purpose of having +them make modifications exclusively for you, or provide you with +facilities for running those works, provided that you comply with the +terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for +you must do so exclusively on your behalf, under your direction and +control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the +conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + +@item Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such +circumvention is effected by exercising rights under this License with +respect to the covered work, and you disclaim any intention to limit +operation or modification of the work as a means of enforcing, against +the work's users, your or third parties' legal rights to forbid +circumvention of technological measures. + +@item Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +@item Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these +conditions: + +@enumerate a +@item +The work must carry prominent notices stating that you modified it, +and giving a relevant date. + +@item +The work must carry prominent notices stating that it is released +under this License and any conditions added under section 7. This +requirement modifies the requirement in section 4 to ``keep intact all +notices''. + +@item +You must license the entire work, as a whole, under this License to +anyone who comes into possession of a copy. This License will +therefore apply, along with any applicable section 7 additional terms, +to the whole of the work, and all its parts, regardless of how they +are packaged. This License gives no permission to license the work in +any other way, but it does not invalidate such permission if you have +separately received it. + +@item +If the work has interactive user interfaces, each must display +Appropriate Legal Notices; however, if the Program has interactive +interfaces that do not display Appropriate Legal Notices, your work +need not make them do so. +@end enumerate + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +``aggregate'' if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +@item Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of +sections 4 and 5, provided that you also convey the machine-readable +Corresponding Source under the terms of this License, in one of these +ways: + +@enumerate a +@item +Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by the +Corresponding Source fixed on a durable physical medium customarily +used for software interchange. + +@item +Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by a written +offer, valid for at least three years and valid for as long as you +offer spare parts or customer support for that product model, to give +anyone who possesses the object code either (1) a copy of the +Corresponding Source for all the software in the product that is +covered by this License, on a durable physical medium customarily used +for software interchange, for a price no more than your reasonable +cost of physically performing this conveying of source, or (2) access +to copy the Corresponding Source from a network server at no charge. + +@item +Convey individual copies of the object code with a copy of the written +offer to provide the Corresponding Source. This alternative is +allowed only occasionally and noncommercially, and only if you +received the object code with such an offer, in accord with subsection +6b. + +@item +Convey the object code by offering access from a designated place +(gratis or for a charge), and offer equivalent access to the +Corresponding Source in the same way through the same place at no +further charge. You need not require recipients to copy the +Corresponding Source along with the object code. If the place to copy +the object code is a network server, the Corresponding Source may be +on a different server (operated by you or a third party) that supports +equivalent copying facilities, provided you maintain clear directions +next to the object code saying where to find the Corresponding Source. +Regardless of what server hosts the Corresponding Source, you remain +obligated to ensure that it is available for as long as needed to +satisfy these requirements. + +@item +Convey the object code using peer-to-peer transmission, provided you +inform other peers where the object code and Corresponding Source of +the work are being offered to the general public at no charge under +subsection 6d. + +@end enumerate + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A ``User Product'' is either (1) a ``consumer product'', which means any +tangible personal property which is normally used for personal, +family, or household purposes, or (2) anything designed or sold for +incorporation into a dwelling. In determining whether a product is a +consumer product, doubtful cases shall be resolved in favor of +coverage. For a particular product received by a particular user, +``normally used'' refers to a typical or common use of that class of +product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected +to use, the product. A product is a consumer product regardless of +whether the product has substantial commercial, industrial or +non-consumer uses, unless such uses represent the only significant +mode of use of the product. + +``Installation Information'' for a User Product means any methods, +procedures, authorization keys, or other information required to +install and execute modified versions of a covered work in that User +Product from a modified version of its Corresponding Source. The +information must suffice to ensure that the continued functioning of +the modified object code is in no case prevented or interfered with +solely because modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or +updates for a work that has been modified or installed by the +recipient, or for the User Product in which it has been modified or +installed. Access to a network may be denied when the modification +itself materially and adversely affects the operation of the network +or violates the rules and protocols for communication across the +network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +@item Additional Terms. + +``Additional permissions'' are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders +of that material) supplement the terms of this License with terms: + +@enumerate a +@item +Disclaiming warranty or limiting liability differently from the terms +of sections 15 and 16 of this License; or + +@item +Requiring preservation of specified reasonable legal notices or author +attributions in that material or in the Appropriate Legal Notices +displayed by works containing it; or + +@item +Prohibiting misrepresentation of the origin of that material, or +requiring that modified versions of such material be marked in +reasonable ways as different from the original version; or + +@item +Limiting the use for publicity purposes of names of licensors or +authors of the material; or + +@item +Declining to grant rights under trademark law for use of some trade +names, trademarks, or service marks; or + +@item +Requiring indemnification of licensors and authors of that material by +anyone who conveys the material (or modified versions of it) with +contractual assumptions of liability to the recipient, for any +liability that these contractual assumptions directly impose on those +licensors and authors. +@end enumerate + +All other non-permissive additional terms are considered ``further +restrictions'' within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; the +above requirements apply either way. + +@item Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +@item Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run +a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +@item Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An ``entity transaction'' is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +@item Patents. + +A ``contributor'' is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's ``contributor version''. + +A contributor's ``essential patent claims'' are all patent claims owned +or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, ``control'' includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a ``patent license'' is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To ``grant'' such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. ``Knowingly relying'' means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is ``discriminatory'' if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on +the non-exercise of one or more of the rights that are specifically +granted under this License. You may not convey a covered work if you +are a party to an arrangement with a third party that is in the +business of distributing software, under which you make payment to the +third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties +who would receive the covered work from you, a discriminatory patent +license (a) in connection with copies of the covered work conveyed by +you (or copies made from those copies), or (b) primarily for and in +connection with specific products or compilations that contain the +covered work, unless you entered into that arrangement, or that patent +license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +@item No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey +a covered work so as to satisfy simultaneously your obligations under +this License and any other pertinent obligations, then as a +consequence you may not convey it at all. For example, if you agree +to terms that obligate you to collect a royalty for further conveying +from those to whom you convey the Program, the only way you could +satisfy both those terms and this License would be to refrain entirely +from conveying the Program. + +@item Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + +@item Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies that a certain numbered version of the GNU General Public +License ``or any later version'' applies to it, you have the option of +following the terms and conditions either of that numbered version or +of any later version published by the Free Software Foundation. If +the Program does not specify a version number of the GNU General +Public License, you may choose any version ever published by the Free +Software Foundation. + +If the Program specifies that a proxy can decide which future versions +of the GNU General Public License can be used, that proxy's public +statement of acceptance of a version permanently authorizes you to +choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +@item Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + +@item Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR +LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM +TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +@item Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +@end enumerate + +@heading END OF TERMS AND CONDITIONS + +@heading How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the ``copyright'' line and a pointer to where the full notice is found. + +@smallexample +@var{one line to give the program's name and a brief idea of what it does.} +Copyright (C) @var{year} @var{name of author} + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see @url{http://www.gnu.org/licenses/}. +@end smallexample + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + +@smallexample +@var{program} Copyright (C) @var{year} @var{name of author} +This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}. +This is free software, and you are welcome to redistribute it +under certain conditions; type @samp{show c} for details. +@end smallexample + +The hypothetical commands @samp{show w} and @samp{show c} should show +the appropriate parts of the General Public License. Of course, your +program's commands might be different; for a GUI interface, you would +use an ``about box''. + +You should also get your employer (if you work as a programmer) or school, +if any, to sign a ``copyright disclaimer'' for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +@url{http://www.gnu.org/licenses/}. + +The GNU General Public License does not permit incorporating your +program into proprietary programs. If your program is a subroutine +library, you may consider it more useful to permit linking proprietary +applications with the library. If this is what you want to do, use +the GNU Lesser General Public License instead of this License. But +first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}. + +@ignore + arch-tag: 0c4a2556-f87e-464f-9b1d-efd920fcaf67 +@end ignore diff --git a/doc/emacs/help.texi b/doc/emacs/help.texi new file mode 100644 index 00000000000..fe7c2a85ffa --- /dev/null +++ b/doc/emacs/help.texi @@ -0,0 +1,666 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Help, Mark, M-x, Top +@chapter Help +@kindex Help +@cindex help +@cindex self-documentation +@findex help-command +@kindex C-h +@kindex F1 + + Emacs provides extensive help features, all accessible through the +@dfn{help character}, @kbd{C-h}. This is a prefix key that is used +for commands that display documentation; the next character you type +should be a @dfn{help options}, to ask for a particular kind of help. +You can cancel the @kbd{C-h} command with @kbd{C-g}. The function key +@key{F1} is equivalent to @kbd{C-h}. + +@kindex C-h C-h +@findex help-for-help + @kbd{C-h} itself is one of the help options; @kbd{C-h C-h} displays +a list of help options, with a brief description of each one +(@code{help-for-help}). You can scroll the list with @key{SPC} and +@key{DEL}, then type the help option you want. To cancel, type +@kbd{C-g}. + + @kbd{C-h} or @key{F1} means ``help'' in various other contexts as +well. For instance, you can type them after a prefix key to display +list of the keys that can follow the prefix key. (A few prefix keys +don't support @kbd{C-h} in this way, because they define other +meanings for it, but they all support @key{F1} for help.) + + Most help buffers use a special major mode, Help mode, which lets +you scroll conveniently with @key{SPC} and @key{DEL}. You can also +follow hyperlinks to URLs, and to other facilities including Info +nodes and customization buffers. @xref{Help Mode}. + +@cindex searching documentation efficiently +@cindex looking for a subject in documentation + If you are looking for a certain feature, but don't know what it is +called or where to look, we recommend three methods. First, try an +apropos command, then try searching the manual index, then look in the +FAQ and the package keywords. + +@table @kbd +@item C-h a @var{topics} @key{RET} +This searches for commands whose names match the argument +@var{topics}. The argument can be a keyword, a list of keywords, or a +regular expression (@pxref{Regexps}). This command displays all the +matches in a new buffer. @xref{Apropos}. + +@item C-h i d m emacs @key{RET} i @var{topic} @key{RET} +This searches for @var{topic} in the indices of the on-line Emacs +manual, and displays the first match found. Press @kbd{,} to see +subsequent matches. You can use a regular expression as @var{topic}. + +@item C-h i d m emacs @key{RET} s @var{topic} @key{RET} +Similar, but searches the @emph{text} of the manual rather than the +indices. + +@item C-h C-f +This displays the Emacs FAQ. You can use the Info commands +to browse it. + +@item C-h p +This displays the available Emacs packages based on keywords. +@xref{Library Keywords}. +@end table + +@menu +* Help Summary:: Brief list of all Help commands. +* Key Help:: Asking what a key does in Emacs. +* Name Help:: Asking about a command, variable or function name. +* Apropos:: Asking what pertains to a given topic. +* Help Mode:: Special features of Help mode and Help buffers. +* Library Keywords:: Finding Lisp libraries by keywords (topics). +* Language Help:: Help relating to international language support. +* Misc Help:: Other help commands. +* Help Files:: Commands to display pre-written help files. +* Help Echo:: Help on active text and tooltips (`balloon help') +@end menu + +@iftex +@node Help Summary +@end iftex +@ifnottex +@node Help Summary +@section Help Summary +@end ifnottex + + Here is a summary of the Emacs interactive help commands. (The +character that follows @kbd{C-h} is the ``help option.'') @xref{Help +Files}, for other help commands that display fixed files of +information. + +@table @kbd +@item C-h a @var{topics} @key{RET} +Display a list of commands whose names match @var{topics} +(@code{apropos-command}; @pxref{Apropos}). +@item C-h b +Display all active key bindings; minor mode bindings first, then those +of the major mode, then global bindings (@code{describe-bindings}). +@item C-h c @var{key} +Given a key sequence @var{key}, show the name of the command that it +runs (@code{describe-key-briefly}). Here @kbd{c} stands for +``character.'' For more extensive information on @var{key}, use +@kbd{C-h k}. +@item C-h d @var{topics} @key{RET} +Display the commands and variables whose documentation matches +@var{topics} (@code{apropos-documentation}). +@item C-h e +Display the @code{*Messages*} buffer +(@code{view-echo-area-messages}). +@item C-h f @var{function} @key{RET} +Display documentation on the Lisp function named @var{function} +(@code{describe-function}). Since commands are Lisp functions, +this works for commands too. +@item C-h h +Display the @file{HELLO} file, which shows examples of various character +sets. +@item C-h i +Run Info, the GNU documentation browser (@code{info}). +The complete Emacs manual is available on-line in Info. +@item C-h k @var{key} +Display the name and documentation of the command that @var{key} runs +(@code{describe-key}). +@item C-h l +Display a description of the last 100 characters you typed +(@code{view-lossage}). +@item C-h m +Display documentation of the current major mode (@code{describe-mode}). +@item C-h p +Find packages by topic keyword (@code{finder-by-keyword}). +@item C-h s +Display the current contents of the syntax table, with an explanation of +what they mean (@code{describe-syntax}). @xref{Syntax}. +@item C-h t +Enter the Emacs interactive tutorial (@code{help-with-tutorial}). +@item C-h v @var{var} @key{RET} +Display the documentation of the Lisp variable @var{var} +(@code{describe-variable}). +@item C-h w @var{command} @key{RET} +Show which keys run the command named @var{command} (@code{where-is}). +@item C-h C @var{coding} @key{RET} +Describe the coding system @var{coding} +(@code{describe-coding-system}). +@item C-h C @key{RET} +Describe the coding systems currently in use. +@item C-h I @var{method} @key{RET} +Describe the input method @var{method} (@code{describe-input-method}). +@item C-h L @var{language-env} @key{RET} +Display information on the character sets, coding systems, and input +methods used in language environment @var{language-env} +(@code{describe-language-environment}). +@item C-h F @var{function} @key{RET} +Enter Info and goes to the node that documents the Emacs function +@var{function} (@code{Info-goto-emacs-command-node}). +@item C-h K @var{key} +Enter Info and goes to the node that documents the key sequence +@var{key} (@code{Info-goto-emacs-key-command-node}). +@item C-h S @var{symbol} @key{RET} +Display the Info documentation on symbol @var{symbol} according to the +programming language you are editing (@code{info-lookup-symbol}). +@item C-h . +Display the help message for a special text area, if point is in one +(@code{display-local-help}). (These include, for example, links in +@samp{*Help*} buffers.) +@end table + +@node Key Help +@section Documentation for a Key + +@kindex C-h c +@findex describe-key-briefly + The help commands to get information about a key sequence are +@kbd{C-h c} and @w{@kbd{C-h k}}. @kbd{C-h c @var{key}} displays in +the echo area the name of the command that @var{key} is bound to. For +example, @kbd{C-h c C-f} displays @samp{forward-char}. Since command +names are chosen to describe what the commands do, this gives you a +very brief description of what @var{key} does. + +@kindex C-h k +@findex describe-key + @kbd{C-h k @var{key}} is similar but gives more information: it +displays the documentation string of the command as well as its name. +It displays this information in a window, since it may not fit in the +echo area. + +@kindex C-h K +@findex Info-goto-emacs-key-command-node + To find the documentation of a key sequence @var{key}, type @kbd{C-h +K @var{key}}. This displays the appropriate manual section which +contains the documentation of @var{key}. + + @kbd{C-h c}, @kbd{C-h k} and @kbd{C-h K} work for any sort of key +sequences, including function keys, menus, and mouse events. For +instance, after @kbd{C-h k} you can select a menu item from the menu +bar, to view the documentation string of the command it runs. + +@kindex C-h w +@findex where-is + @kbd{C-h w @var{command} @key{RET}} lists the keys that are bound to +@var{command}. It displays the list in the echo area. If it says the +command is not on any key, that means you must use @kbd{M-x} to run +it. @kbd{C-h w} runs the command @code{where-is}. + +@node Name Help +@section Help by Command or Variable Name + +@kindex C-h f +@findex describe-function + @kbd{C-h f @var{function} @key{RET}} (@code{describe-function}) +displays the documentation of Lisp function @var{function}, in a +window. Since commands are Lisp functions, you can use this method to +view the documentation of any command whose name you know. For +example, + +@example +C-h f auto-fill-mode @key{RET} +@end example + +@noindent +displays the documentation of @code{auto-fill-mode}. This is the only +way to get the documentation of a command that is not bound to any key +(one which you would normally run using @kbd{M-x}). + + @kbd{C-h f} is also useful for Lisp functions that you use in a Lisp +program. For example, if you have just written the expression +@code{(make-vector len)} and want to check that you are using +@code{make-vector} properly, type @kbd{C-h f make-vector @key{RET}}. +Because @kbd{C-h f} allows all function names, not just command names, +you may find that some of your favorite completion abbreviations that +work in @kbd{M-x} don't work in @kbd{C-h f}. An abbreviation that is +unique among command names may not be unique among all function names. + + If you type @kbd{C-h f @key{RET}}, it describes the function called +by the innermost Lisp expression in the buffer around point, +@emph{provided} that function name is a valid, defined Lisp function. +(That name appears as the default while you enter the argument.) For +example, if point is located following the text @samp{(make-vector +(car x)}, the innermost list containing point is the one that starts +with @samp{(make-vector}, so @kbd{C-h f @key{RET}} will describe the +function @code{make-vector}. + + @kbd{C-h f} is also useful just to verify that you spelled a +function name correctly. If the minibuffer prompt for @kbd{C-h f} +shows the function name from the buffer as the default, it means that +name is defined as a Lisp function. Type @kbd{C-g} to cancel the +@kbd{C-h f} command if you don't really want to view the +documentation. + +@kindex C-h v +@findex describe-variable + @kbd{C-h v} (@code{describe-variable}) is like @kbd{C-h f} but +describes Lisp variables instead of Lisp functions. Its default is +the Lisp symbol around or before point, if that is the name of a +defined Lisp variable. @xref{Variables}. + + Help buffers that describe Emacs variables and functions normally +have hyperlinks to the corresponding source definition, if you have +the source files installed. (@xref{Hyperlinking}.) If you know Lisp +(or C), this provides the ultimate documentation. If you don't know +Lisp, you should learn it. (The Introduction to Emacs Lisp +Programming, available from the FSF through fsf.org, is a good way to +get started.) If Emacs feels you are just @emph{using} it, treating +it as an object program, its feelings may be hurt. For real intimacy, +read the Emacs source code. + +@kindex C-h F +@findex Info-goto-emacs-command-node + To find a function's documentation in a manual, use @kbd{C-h F} +(@code{Info-goto-emacs-command-node}). This knows about various +manuals, not just the Emacs manual, and finds the right one. + +@node Apropos +@section Apropos + + The @dfn{apropos} commands answer questions like, ``What are the +commands for working with files?'' More precisely, you specify an +@dfn{apropos pattern}, which means either a word, a list of words, or +a regular expression. Each apropos command displays a list of items +that match the pattern, in a separate buffer. + +@table @kbd +@item C-h a @var{pattern} @key{RET} +Search for commands whose names match @var{pattern}. + +@item M-x apropos @key{RET} @var{pattern} @key{RET} +Search for functions and variables whose names match @var{pattern}. +Both interactive functions (commands) and noninteractive functions can +be found by this command. + +@item M-x apropos-variable @key{RET} @var{pattern} @key{RET} +Search for user-option variables whose names match @var{pattern}. + +@item M-x apropos-value @key{RET} @var{pattern} @key{RET} +Search for functions whose definitions @var{pattern}, and variables +whose values match @var{pattern}. + +@item C-h d @var{pattern} @key{RET} +Search for functions and variables whose @strong{documentation +strings} match @var{pattern}. +@end table + +@kindex C-h a +@findex apropos-command +@cindex apropos + The simplest kind of apropos pattern is one word. Anything which +contains that word matches the pattern. Thus, to find the commands +that work on files, type @kbd{C-h a file @key{RET}}. This displays a +list of all command names that contain @samp{file}, including +@code{copy-file}, @code{find-file}, and so on. Each command name +comes with a brief description and a list of keys you can currently +invoke it with. In our example, it would say that you can invoke +@code{find-file} by typing @kbd{C-x C-f}. + + The @kbd{a} in @kbd{C-h a} stands for ``Apropos''; @kbd{C-h a} +runs the command @code{apropos-command}. This command normally checks +only commands (interactive functions); if you specify a prefix +argument, it checks noninteractive functions as well. + + For more information about a function definition, variable or symbol +property listed in the apropos buffer, you can click on it with +@kbd{Mouse-1} or @kbd{Mouse-2}, or move there and type @key{RET}. + + When you specify more than one word in the apropos pattern, a name +must contain at least two of the words in order to match. Thus, if +you are looking for commands to kill a chunk of text before point, you +could try @kbd{C-h a kill back backward behind before @key{RET}}. The +real command name @code{kill-backward} will match that; if there were +a command @code{kill-text-before}, it would also match, since it +contains two of the specified words. + + For even greater flexibility, you can specify a regular expression +(@pxref{Regexps}). An apropos pattern is interpreted as a regular +expression if it contains any of the regular expression special +characters, @samp{^$*+?.\[}. + + Following the conventions for naming Emacs commands, here are some +words that you'll find useful in apropos patterns. By using them in +@kbd{C-h a}, you will also get a feel for the naming conventions. + +@quotation +char, line, word, sentence, paragraph, region, page, sexp, list, defun, +rect, buffer, frame, window, face, file, dir, register, mode, beginning, end, +forward, backward, next, previous, up, down, search, goto, kill, delete, +mark, insert, yank, fill, indent, case, change, set, what, list, find, +view, describe, default. +@end quotation + +@findex apropos + Use @kbd{M-x apropos} instead of @kbd{C-h a} to list all the Lisp +symbols that match an apropos pattern, not just the symbols that are +commands. This command does not list key bindings by default; specify +a numeric argument if you want it to list them. + +@findex apropos-variable + Use @kbd{M-x apropos-variable} to list user-customizable variables +that match an apropos pattern. If you specify a prefix argument, it +lists all matching variables. + +@kindex C-h d +@findex apropos-documentation + The @code{apropos-documentation} command is like @code{apropos} +except that it searches documentation strings instead of symbol names +for matches. + +@findex apropos-value + The @code{apropos-value} command is like @code{apropos} except that +it searches variables' values for matches for the apropos pattern. +With a prefix argument, it also checks symbols' function definitions +and property lists. + +@vindex apropos-do-all + If the variable @code{apropos-do-all} is non-@code{nil}, the apropos +commands always behave as if they had been given a prefix argument. + +@vindex apropos-sort-by-scores +@cindex apropos search results, order by score + By default, apropos lists the search results in alphabetical order. +If the variable @code{apropos-sort-by-scores} is non-@code{nil}, the +apropos commands try to guess the relevance of each result, and +display the most relevant ones first. + +@vindex apropos-documentation-sort-by-scores + By default, apropos lists the search results for +@code{apropos-documentation} in order of relevance of the match. If +the variable @code{apropos-documentation-sort-by-scores} is +@code{nil}, apropos lists the symbols found in alphabetical order. + +@node Help Mode +@section Help Mode Commands + + Help buffers provide the same commands as View mode (@pxref{Misc File +Ops}), plus a few special commands of their own. + +@table @kbd +@item @key{SPC} +Scroll forward. +@item @key{DEL} +Scroll backward. +@item @key{RET} +Follow a cross reference at point. +@item @key{TAB} +Move point forward to the next cross reference. +@item S-@key{TAB} +Move point back to the previous cross reference. +@item Mouse-1 +@itemx Mouse-2 +Follow a cross reference that you click on. +@item C-c C-c +Show all documentation about the symbol at point. +@end table + + When a function name (@pxref{M-x,, Running Commands by Name}), +variable name (@pxref{Variables}), or face name (@pxref{Faces}) +appears in the documentation, it normally appears inside paired +single-quotes. To view the documentation of that command, variable or +face, you can click on the name with @kbd{Mouse-1} or @kbd{Mouse-2}, +or move point there and type @key{RET}. Use @kbd{C-c C-b} to retrace +your steps. + +@cindex URL, viewing in help +@cindex help, viewing web pages +@cindex viewing web pages in help +@cindex web pages, viewing in help +@findex browse-url + You can follow cross references to URLs (web pages) also. This uses +the @code{browse-url} command to view the page in the browser you +choose. @xref{Browse-URL}. + +@kindex @key{TAB} @r{(Help mode)} +@findex help-next-ref +@kindex S-@key{TAB} @r{(Help mode)} +@findex help-previous-ref + There are convenient commands to move point to cross references in +the help text. @key{TAB} (@code{help-next-ref}) moves point down to +the next cross reference. @kbd{S-@key{TAB}} moves up to the previous +cross reference (@code{help-previous-ref}). + + To view all documentation about any symbol name that appears in the +text, move point to the symbol name and type @kbd{C-c C-c} +(@code{help-follow-symbol}). This shows all available documentation +about the symbol as a variable, function and/or face. As above, use +@kbd{C-c C-b} to retrace your steps. + +@node Library Keywords +@section Keyword Search for Lisp Libraries + +@kindex C-h p +@findex finder-by-keyword +The @kbd{C-h p} command lets you search the standard Emacs Lisp +libraries by topic keywords. Here is a partial list of keywords you can +use: + +@multitable {convenience} {aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} +@item abbrev@tab abbreviation handling, typing shortcuts, macros. +@item bib@tab code related to the @code{bib} bibliography processor. +@item c@tab support for the C language and related languages. +@item calendar@tab calendar and time management support. +@item comm@tab communications, networking, remote access to files. +@item convenience@tab convenience features for faster editing. +@item data@tab support for editing files of data. +@item docs@tab support for Emacs documentation. +@item emulations@tab emulations of other editors. +@item extensions@tab Emacs Lisp language extensions. +@item faces@tab support for multiple fonts. +@item files@tab support for editing and manipulating files. +@item frames@tab support for Emacs frames and window systems. +@item games@tab games, jokes and amusements. +@item hardware@tab support for interfacing with exotic hardware. +@item help@tab support for on-line help systems. +@item hypermedia@tab support for links between text or other media types. +@item i18n@tab internationalization and alternate character-set support. +@item internal@tab code for Emacs internals, build process, defaults. +@item languages@tab specialized modes for editing programming languages. +@item lisp@tab Lisp support, including Emacs Lisp. +@item local@tab code local to your site. +@item maint@tab maintenance aids for the Emacs development group. +@item mail@tab modes for electronic-mail handling. +@item matching@tab various sorts of searching and matching. +@item mouse@tab mouse support. +@item multimedia@tab images and sound support. +@item news@tab support for netnews reading and posting. +@item oop@tab support for object-oriented programming. +@item outlines@tab support for hierarchical outlining. +@item processes@tab process, subshell, compilation, and job control support. +@item terminals@tab support for terminal types. +@item tex@tab supporting code for the @TeX{} formatter. +@item tools@tab programming tools. +@item unix@tab front-ends/assistants for, or emulators of, UNIX-like features. +@item wp@tab word processing. +@end multitable + +@node Language Help +@section Help for International Language Support + + You can use the command @kbd{C-h L} +(@code{describe-language-environment}) to get information about a +specific language environment. @xref{Language Environments}. This +tells you which languages this language environment supports. It also +lists the character sets, coding systems, and input methods that work +with this language environment, and finally shows some sample text to +illustrate scripts. + + The command @kbd{C-h h} (@code{view-hello-file}) displays the file +@file{etc/HELLO}, which shows how to say ``hello'' in many languages. + + The command @kbd{C-h I} (@code{describe-input-method}) describes an +input method---either a specified input method, or by default the +input method currently in use. @xref{Input Methods}. + + The command @kbd{C-h C} (@code{describe-coding-system}) describes +coding systems---either a specified coding system, or the ones +currently in use. @xref{Coding Systems}. + +@node Misc Help +@section Other Help Commands + +@kindex C-h i +@findex info +@cindex Info +@cindex manuals, on-line +@cindex on-line manuals + @kbd{C-h i} (@code{info}) runs the Info program, which browses +structured documentation files. The entire Emacs manual is available +within Info, along with many other manuals for the GNU system. Type +@kbd{h} after entering Info to run a tutorial on using Info. + +@cindex find Info manual by its file name + With a numeric argument @var{n}, @kbd{C-h i} selects the Info buffer +@samp{*info*<@var{n}>}. This is useful if you want to browse multiple +Info manuals simultaneously. If you specify just @kbd{C-u} as the +prefix argument, @kbd{C-h i} prompts for the name of a documentation +file, so you can browse a file which doesn't have an entry in the +top-level Info menu. + + The help commands @kbd{C-h F @var{function} @key{RET}} and @kbd{C-h +K @var{key}}, described above, enter Info and go straight to the +documentation of @var{function} or @var{key}. + +@kindex C-h S +@findex info-lookup-symbol + When editing a program, if you have an Info version of the manual +for the programming language, you can use @kbd{C-h S} +(@code{info-lookup-symbol}) to find symbol (keyword, function or +variable) in the proper manual. The details of how this command works +depend on the major mode. + +@kindex C-h l +@findex view-lossage + If something surprising happens, and you are not sure what you +typed, use @kbd{C-h l} (@code{view-lossage}). @kbd{C-h l} displays +the last 100 characters you typed in Emacs. If you see commands that +you don't know, you can use @kbd{C-h c} to find out what they do. + +@kindex C-h e +@findex view-echo-area-messages + To review recent echo area messages, use @kbd{C-h e} +(@code{view-echo-area-messages}). This displays the buffer +@code{*Messages*}, where those messages are kept. + +@kindex C-h m +@findex describe-mode + Each Emacs major mode typically redefines a few keys and makes other +changes in how editing works. @kbd{C-h m} (@code{describe-mode}) +displays documentation on the current major mode, which normally +describes the commands and features that are changed in this mode. + +@kindex C-h b +@findex describe-bindings + @kbd{C-h b} (@code{describe-bindings}) and @kbd{C-h s} +(@code{describe-syntax}) show other information about the current +environment within Emacs. @kbd{C-h b} displays a list of all the key +bindings now in effect: first the local bindings of the current minor +modes, then the local bindings defined by the current major mode, and +finally the global bindings (@pxref{Key Bindings}). @kbd{C-h s} +displays the contents of the syntax table, with explanations of each +character's syntax (@pxref{Syntax}). + + You can get a list of subcommands for a particular prefix key by +typing @kbd{C-h} after the prefix key. (There are a few prefix keys +for which this does not work---those that provide their own bindings +for @kbd{C-h}. One of these is @key{ESC}, because @kbd{@key{ESC} C-h} +is actually @kbd{C-M-h}, which marks a defun.) + +@node Help Files +@section Help Files + + The Emacs help commands described above display dynamic help based +on the current state within Emacs, or refer to manuals. Other help +commands display pre-written, static help files. These commands all +have the form @kbd{C-h C-@var{char}}; that is, @kbd{C-h} followed by a +control character. + +@kindex C-h C-c +@findex describe-copying +@kindex C-h C-d +@findex describe-distribution +@kindex C-h C-e +@findex view-emacs-problems +@kindex C-h C-f +@findex view-emacs-FAQ +@kindex C-h C-n +@findex view-emacs-news +@kindex C-h C-p +@findex describe-project +@kindex C-h C-t +@findex view-emacs-todo +@kindex C-h C-w +@findex describe-no-warranty + +@table @kbd +@item C-h C-c +Display the Emacs copying conditions (@code{describe-copying}). +These are the rules under which you can copy and redistribute Emacs. +@item C-h C-d +Display how to download or order the latest version of +Emacs and other GNU software (@code{describe-distribution}). +@item C-h C-e +Display the list of known Emacs problems, sometimes with suggested +workarounds (@code{view-emacs-problems}). +@item C-h C-f +Display the Emacs frequently-answered-questions list (@code{view-emacs-FAQ}). +@item C-h C-n +Display the Emacs ``news'' file, which lists new features in the most +recent version of Emacs (@code{view-emacs-news}). +@item C-h C-p +Display general information about the GNU Project +(@code{describe-project}). +@item C-h C-t +Display the Emacs to-do list (@code{view-todo}). +@item C-h C-w +Display the full details on the complete absence of warranty for GNU +Emacs (@code{describe-no-warranty}). +@end table + +@node Help Echo +@section Help on Active Text and Tooltips + +@cindex tooltips +@cindex balloon help + When a region of text is ``active,'' so that you can select it with +the mouse or a key like @kbd{RET}, it often has associated help text. +For instance, most parts of the mode line have help text. On +graphical displays, the help text is displayed as a ``tooltip'' +(sometimes known as ``balloon help''), when you move the mouse over +the active text. @xref{Tooltips}. On some systems, it is shown in +the echo area. On text-only terminals, if Emacs cannot follow the +mouse, it cannot show the help text on mouse-over. + +@kindex C-h . +@findex display-local-help +@vindex help-at-pt-display-when-idle + You can also access text region help info using the keyboard. The +command @kbd{C-h .} (@code{display-local-help}) displays any help text +associated with the text at point, using the echo area. If you want +help text to be displayed automatically whenever it is available at +point, set the variable @code{help-at-pt-display-when-idle} to +@code{t}. + +@ignore + arch-tag: 6f33ab62-bc75-4367-8057-fd67cc15c3a1 +@end ignore diff --git a/doc/emacs/indent.texi b/doc/emacs/indent.texi new file mode 100644 index 00000000000..568b54897fa --- /dev/null +++ b/doc/emacs/indent.texi @@ -0,0 +1,244 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2001, 2002, +@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Indentation, Text, Major Modes, Top +@chapter Indentation +@cindex indentation +@cindex columns (indentation) + + This chapter describes the Emacs commands that add, remove, or +adjust indentation. + +@table @kbd +@item @key{TAB} +Indent the current line ``appropriately'' in a mode-dependent fashion. +@item @kbd{C-j} +Perform @key{RET} followed by @key{TAB} (@code{newline-and-indent}). +@item M-^ +Merge the previous and the current line (@code{delete-indentation}). +This would cancel the effect of a preceding @kbd{C-j}. +@item C-M-o +Split the current line at point; text on the line after point becomes a +new line indented to the same column where point is located +(@code{split-line}). +@item M-m +Move (forward or back) to the first nonblank character on the current +line (@code{back-to-indentation}). +@item C-M-\ +Indent lines in the region to the same column (@code{indent-region}). +@item C-x @key{TAB} +Shift lines in the region rigidly right or left (@code{indent-rigidly}). +@item M-i +Indent from point to the next prespecified tab stop column +(@code{tab-to-tab-stop}). +@item M-x indent-relative +Indent from point to under an indentation point in the previous line. +@end table + + Emacs supports four general categories of operations that could all +be called `indentation': + +@enumerate +@item +Insert a tab character. You can type @kbd{C-q @key{TAB}} to do this. + +A tab character is displayed as a stretch of whitespace which extends +to the next display tab stop position, and the default width of a tab +stop is eight. @xref{Text Display}, for more details. + +@item +Insert whitespace up to the next tab stop. You can set tab stops at +your choice of column positions, then type @kbd{M-i} to advance to the +next tab stop. The default tab stop settings have a tab stop every +eight columns, which means by default @kbd{M-i} inserts a tab +character. To set the tab stops, use @kbd{M-x edit-tab-stops}. + +@item +Align a line with the previous line. More precisely, the command +@kbd{M-x indent-relative} indents the current line under the beginning +of some word in the previous line. In Fundamental mode and in Text +mode, @key{TAB} runs the command @code{indent-relative}. + +@item +The most sophisticated method is @dfn{syntax-driven indentation}. +Most programming languages have an indentation convention. For Lisp +code, lines are indented according to their nesting in parentheses. C +code uses the same general idea, but many details are different. + +@kindex TAB +Type @key{TAB} to do syntax-driven indentation, in a mode that +supports it. It realigns the current line according with the syntax +of the preceding lines. No matter where in the line you are when you +type @key{TAB}, it aligns the line as a whole. +@end enumerate + + Normally, most of the above methods insert an optimal mix of tabs and +spaces to align to the desired column. @xref{Just Spaces}, for how to +disable use of tabs. However, @kbd{C-q @key{TAB}} always inserts a +tab, even when tabs are disabled for the indentation commands. + +@menu +* Indentation Commands:: Various commands and techniques for indentation. +* Tab Stops:: You can set arbitrary "tab stops" and then + indent to the next tab stop when you want to. +* Just Spaces:: You can request indentation using just spaces. +@end menu + +@node Indentation Commands, Tab Stops, Indentation, Indentation +@section Indentation Commands and Techniques + +@kindex M-m +@findex back-to-indentation + To move over the indentation on a line, do @kbd{M-m} +(@code{back-to-indentation}). This command, given anywhere on a line, +positions point at the first nonblank character on the line, if any, +or else at the end of the line. + + To insert an indented line before the current line, do @kbd{C-a C-o +@key{TAB}}. To make an indented line after the current line, use +@kbd{C-e C-j}. + + If you just want to insert a tab character in the buffer, you can type +@kbd{C-q @key{TAB}}. + +@kindex C-M-o +@findex split-line + @kbd{C-M-o} (@code{split-line}) moves the text from point to the end of +the line vertically down, so that the current line becomes two lines. +@kbd{C-M-o} first moves point forward over any spaces and tabs. Then it +inserts after point a newline and enough indentation to reach the same +column point is on. Point remains before the inserted newline; in this +regard, @kbd{C-M-o} resembles @kbd{C-o}. + +@kindex M-^ +@findex delete-indentation + To join two lines cleanly, use the @kbd{M-^} +(@code{delete-indentation}) command. It deletes the indentation at +the front of the current line, and the line boundary as well, +replacing them with a single space. As a special case (useful for +Lisp code) the single space is omitted if the characters to be joined +are consecutive open parentheses or closing parentheses, or if the +junction follows another newline. To delete just the indentation of a +line, go to the beginning of the line and use @kbd{M-\} +(@code{delete-horizontal-space}), which deletes all spaces and tabs +around the cursor. + + If you have a fill prefix, @kbd{M-^} deletes the fill prefix if it +appears after the newline that is deleted. @xref{Fill Prefix}. + +@kindex C-M-\ +@kindex C-x TAB +@findex indent-region +@findex indent-rigidly + There are also commands for changing the indentation of several lines +at once. They apply to all the lines that begin in the region. +@kbd{C-M-\} (@code{indent-region}) indents each line in the ``usual'' +way, as if you had typed @key{TAB} at the beginning of the line. A +numeric argument specifies the column to indent to, and each line is +shifted left or right so that its first nonblank character appears in +that column. @kbd{C-x @key{TAB}} (@code{indent-rigidly}) moves all of +the lines in the region right by its argument (left, for negative +arguments). The whole group of lines moves rigidly sideways, which is +how the command gets its name. + +@cindex remove indentation + To remove all indentation from all of the lines in the region, +invoke @kbd{C-x @key{TAB}} with a large negative argument, such as +-1000. + +@findex indent-relative + @kbd{M-x indent-relative} indents at point based on the previous line +(actually, the last nonempty line). It inserts whitespace at point, moving +point, until it is underneath the next indentation point in the previous line. +An indentation point is the end of a sequence of whitespace or the end of +the line. If point is farther right than any indentation point in the +previous line, @code{indent-relative} runs @code{tab-to-tab-stop} +@ifnottex +(@pxref{Tab Stops}), +@end ifnottex +@iftex +(see next section), +@end iftex +unless it is called with a numeric argument, in which case it does +nothing. + + @xref{Format Indentation}, for another way of specifying the +indentation for part of your text. + +@node Tab Stops, Just Spaces, Indentation Commands, Indentation +@section Tab Stops + +@cindex tab stops +@cindex using tab stops in making tables +@cindex tables, indentation for +@kindex M-i +@findex tab-to-tab-stop + For typing in tables, you can use @kbd{M-i} (@code{tab-to-tab-stop}). +This command inserts indentation before point, enough to reach the +next tab stop column. + +@findex edit-tab-stops +@findex edit-tab-stops-note-changes +@kindex C-c C-c @r{(Edit Tab Stops)} +@vindex tab-stop-list + You can specify the tab stops used by @kbd{M-i}. They are stored in a +variable called @code{tab-stop-list}, as a list of column-numbers in +increasing order. + + The convenient way to set the tab stops is with @kbd{M-x +edit-tab-stops}, which creates and selects a buffer containing a +description of the tab stop settings. You can edit this buffer to +specify different tab stops, and then type @kbd{C-c C-c} to make those +new tab stops take effect. The buffer uses Overwrite mode +(@pxref{Minor Modes}). @code{edit-tab-stops} records which buffer was +current when you invoked it, and stores the tab stops back in that +buffer; normally all buffers share the same tab stops and changing +them in one buffer affects all, but if you happen to make +@code{tab-stop-list} local in one buffer then @code{edit-tab-stops} in +that buffer will edit the local settings. + + Here is what the text representing the tab stops looks like for ordinary +tab stops every eight columns. + +@example + : : : : : : +0 1 2 3 4 +0123456789012345678901234567890123456789012345678 +To install changes, type C-c C-c +@end example + + The first line contains a colon at each tab stop. The remaining lines +are present just to help you see where the colons are and know what to do. + + Note that the tab stops that control @code{tab-to-tab-stop} have nothing +to do with displaying tab characters in the buffer. @xref{Text Display}, +for more information on that. + +@node Just Spaces,, Tab Stops, Indentation +@section Tabs vs. Spaces + +@vindex indent-tabs-mode + Emacs normally uses both tabs and spaces to indent lines. If you +prefer, all indentation can be made from spaces only. To request +this, set @code{indent-tabs-mode} to @code{nil}. This is a per-buffer +variable, so altering the variable affects only the current buffer, +but there is a default value which you can change as well. +@xref{Locals}. + + A tab is not always displayed in the same way. By default, tabs are +eight columns wide, but some people like to customize their tools to +use a different tab width. So by using spaces only, you can make sure +that your file looks the same regardless of the tab width setting. + +@findex tabify +@findex untabify + There are also commands to convert tabs to spaces or vice versa, always +preserving the columns of all nonblank text. @kbd{M-x tabify} scans the +region for sequences of spaces, and converts sequences of at least two +spaces to tabs if that can be done without changing indentation. @kbd{M-x +untabify} changes all tabs in the region to appropriate numbers of spaces. + +@ignore + arch-tag: acc07de7-ae11-4ee8-a159-cb59c473f0fb +@end ignore diff --git a/doc/emacs/killing.texi b/doc/emacs/killing.texi new file mode 100644 index 00000000000..b626bfab385 --- /dev/null +++ b/doc/emacs/killing.texi @@ -0,0 +1,699 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. + +@node Killing, Yanking, Mark, Top +@chapter Killing and Moving Text + +@ifnottex +@raisesections +@end ifnottex + + @dfn{Killing} means erasing text and copying it into the @dfn{kill +ring}, from which you can bring it back into the buffer by +@dfn{yanking} it. (Some systems use the terms ``cutting'' and +``pasting'' for these operations.) This is the most common way of +moving or copying text within Emacs. Killing and yanking is very safe +because Emacs remembers several recent kills, not just the last one. +It is versatile, because the many commands for killing syntactic units +can also be used for moving those units. But there are other ways of +copying text for special purposes. + +@iftex +@section Deletion and Killing +@end iftex + +@cindex killing text +@cindex cutting text +@cindex deletion + Most commands which erase text from the buffer save it in the kill +ring. These commands are known as @dfn{kill} commands. The commands +that erase text but do not save it in the kill ring are known as +@dfn{delete} commands. The @kbd{C-x u} (@code{undo}) command +(@pxref{Undo}) can undo both kill and delete commands; the importance +of the kill ring is that you can also yank the text in a different +place or places. Emacs has only one kill ring for all buffers, so you +can kill text in one buffer and yank it in another buffer. + + The delete commands include @kbd{C-d} (@code{delete-char}) and +@key{DEL} (@code{delete-backward-char}), which delete only one +character at a time, and those commands that delete only spaces or +newlines. Commands that can erase significant amounts of nontrivial +data generally do a kill operation instead. The commands' names and +individual descriptions use the words @samp{kill} and @samp{delete} to +say which kind of operation they perform. + +@vindex kill-read-only-ok +@cindex read-only text, killing + You cannot kill read-only text, since such text does not allow any +kind of modification. But some users like to use the kill commands to +copy read-only text into the kill ring, without actually changing it. +Therefore, the kill commands work specially in a read-only buffer: +they move over text, and copy it to the kill ring, without actually +deleting it from the buffer. Normally, kill commands beep and display +an error message when this happens. But if you set the variable +@code{kill-read-only-ok} to a non-@code{nil} value, they just print a +message in the echo area to explain why the text has not been erased. + + You can also use the mouse to kill and yank. @xref{Cut and Paste}. + +@menu +* Deletion:: Commands for deleting small amounts of text and + blank areas. +* Killing by Lines:: How to kill entire lines of text at one time. +* Other Kill Commands:: Commands to kill large regions of text and + syntactic units such as words and sentences. +@end menu + +@need 1500 +@node Deletion +@subsection Deletion +@findex delete-backward-char +@findex delete-char + + Deletion means erasing text and not saving it in the kill ring. For +the most part, the Emacs commands that delete text are those that +erase just one character or only whitespace. + +@table @kbd +@item C-d +@itemx @key{DELETE} +Delete next character (@code{delete-char}). If your keyboard has a +@key{DELETE} function key (usually located in the edit keypad), Emacs +binds it to @code{delete-char} as well. +@item @key{DEL} +@itemx @key{BS} +Delete previous character (@code{delete-backward-char}). +@item M-\ +Delete spaces and tabs around point (@code{delete-horizontal-space}). +@item M-@key{SPC} +Delete spaces and tabs around point, leaving one space +(@code{just-one-space}). +@item C-x C-o +Delete blank lines around the current line (@code{delete-blank-lines}). +@item M-^ +Join two lines by deleting the intervening newline, along with any +indentation following it (@code{delete-indentation}). +@end table + +@kindex DEL +@kindex C-d + The most basic delete commands are @kbd{C-d} (@code{delete-char}) and +@key{DEL} (@code{delete-backward-char}). @kbd{C-d} deletes the +character after point, the one the cursor is ``on top of.'' This +doesn't move point. @key{DEL} deletes the character before the cursor, +and moves point back. You can delete newlines like any other characters +in the buffer; deleting a newline joins two lines. Actually, @kbd{C-d} +and @key{DEL} aren't always delete commands; when given arguments, they +kill instead, since they can erase more than one character this way. + +@kindex BACKSPACE +@kindex BS +@kindex DELETE + Every keyboard has a large key which is a short distance above the +@key{RET} or @key{ENTER} key and is normally used for erasing what you +have typed. It may be labeled @key{DEL}, @key{BACKSPACE}, @key{BS}, +@key{DELETE}, or even with a left arrow. Regardless of the label on +the key, in Emacs it called @key{DEL}, and it should delete one +character backwards. + + Many keyboards (including standard PC keyboards) have a +@key{BACKSPACE} key a short ways above @key{RET} or @key{ENTER}, and a +@key{DELETE} key elsewhere. In that case, the @key{BACKSPACE} key is +@key{DEL}, and the @key{DELETE} key is equivalent to @kbd{C-d}---or it +should be. + + Why do we say ``or it should be''? When Emacs starts up using a +graphical display, it determines automatically which key or keys should be +equivalent to @key{DEL}. As a result, @key{BACKSPACE} and/or @key{DELETE} +keys normally do the right things. But in some unusual cases Emacs +gets the wrong information from the system. If these keys don't do +what they ought to do, you need to tell Emacs which key to use for +@key{DEL}. @xref{DEL Does Not Delete}, for how to do this. + +@findex normal-erase-is-backspace-mode + On most text-only terminals, Emacs cannot tell which keys the +keyboard really has, so it follows a uniform plan which may or may not +fit your keyboard. The uniform plan is that the @acronym{ASCII} @key{DEL} +character deletes, and the @acronym{ASCII} @key{BS} (backspace) character asks +for help (it is the same as @kbd{C-h}). If this is not right for your +keyboard, such as if you find that the key which ought to delete backwards +enters Help instead, see @ref{DEL Does Not Delete}. + +@kindex M-\ +@findex delete-horizontal-space +@kindex M-SPC +@findex just-one-space + The other delete commands are those which delete only whitespace +characters: spaces, tabs and newlines. @kbd{M-\} +(@code{delete-horizontal-space}) deletes all the spaces and tab +characters before and after point. With a prefix argument, this only +deletes spaces and tab characters before point. @kbd{M-@key{SPC}} +(@code{just-one-space}) does likewise but leaves a single space after +point, regardless of the number of spaces that existed previously +(even if there were none before). With a numeric argument @var{n}, it +leaves @var{n} spaces after point. + + @kbd{C-x C-o} (@code{delete-blank-lines}) deletes all blank lines +after the current line. If the current line is blank, it deletes all +blank lines preceding the current line as well (leaving one blank line, +the current line). On a solitary blank line, it deletes that line. + + @kbd{M-^} (@code{delete-indentation}) joins the current line and the +previous line, by deleting a newline and all surrounding spaces, usually +leaving a single space. @xref{Indentation,M-^}. + +@node Killing by Lines +@subsection Killing by Lines + +@table @kbd +@item C-k +Kill rest of line or one or more lines (@code{kill-line}). +@item C-S-backspace +Kill an entire line at once (@code{kill-whole-line}) +@end table + +@kindex C-k +@findex kill-line + The simplest kill command is @kbd{C-k}. If given at the beginning of +a line, it kills all the text on the line, leaving it blank. When used +on a blank line, it kills the whole line including its newline. To kill +an entire non-blank line, go to the beginning and type @kbd{C-k} twice. + + More generally, @kbd{C-k} kills from point up to the end of the line, +unless it is at the end of a line. In that case it kills the newline +following point, thus merging the next line into the current one. +Spaces and tabs that you can't see at the end of the line are ignored +when deciding which case applies, so if point appears to be at the end +of the line, you can be sure @kbd{C-k} will kill the newline. + + When @kbd{C-k} is given a positive argument, it kills that many lines +and the newlines that follow them (however, text on the current line +before point is not killed). With a negative argument @minus{}@var{n}, it +kills @var{n} lines preceding the current line (together with the text +on the current line before point). Thus, @kbd{C-u - 2 C-k} at the front +of a line kills the two previous lines. + + @kbd{C-k} with an argument of zero kills the text before point on the +current line. + +@vindex kill-whole-line + If the variable @code{kill-whole-line} is non-@code{nil}, @kbd{C-k} at +the very beginning of a line kills the entire line including the +following newline. This variable is normally @code{nil}. + +@kindex C-S-backspace +@findex kill-whole-line + @kbd{C-S-backspace} (@code{kill-whole-line}) will kill a whole line +including its newline regardless of the position of point within the +line. Note that many character terminals will prevent you from typing +the key sequence @kbd{C-S-backspace}. + +@node Other Kill Commands +@subsection Other Kill Commands +@findex kill-region +@kindex C-w + +@table @kbd +@item C-w +Kill region (from point to the mark) (@code{kill-region}). +@item M-d +Kill word (@code{kill-word}). @xref{Words}. +@item M-@key{DEL} +Kill word backwards (@code{backward-kill-word}). +@item C-x @key{DEL} +Kill back to beginning of sentence (@code{backward-kill-sentence}). +@xref{Sentences}. +@item M-k +Kill to end of sentence (@code{kill-sentence}). +@item C-M-k +Kill the following balanced expression (@code{kill-sexp}). @xref{Expressions}. +@item M-z @var{char} +Kill through the next occurrence of @var{char} (@code{zap-to-char}). +@end table + + The most general kill command is @kbd{C-w} (@code{kill-region}), +which kills everything between point and the mark. With this command, +you can kill any contiguous sequence of characters, if you first set +the region around them. + +@kindex M-z +@findex zap-to-char + A convenient way of killing is combined with searching: @kbd{M-z} +(@code{zap-to-char}) reads a character and kills from point up to (and +including) the next occurrence of that character in the buffer. A +numeric argument acts as a repeat count. A negative argument means to +search backward and kill text before point. + + Other syntactic units can be killed: words, with @kbd{M-@key{DEL}} +and @kbd{M-d} (@pxref{Words}); balanced expressions, with @kbd{C-M-k} +(@pxref{Expressions}); and sentences, with @kbd{C-x @key{DEL}} and +@kbd{M-k} (@pxref{Sentences}).@refill + +@node Yanking, Accumulating Text, Killing, Top +@section Yanking +@cindex moving text +@cindex copying text +@cindex kill ring +@cindex yanking +@cindex pasting + + @dfn{Yanking} means reinserting text previously killed. This is what +some systems call ``pasting.'' The usual way to move or copy text is to +kill it and then yank it elsewhere one or more times. This is very safe +because Emacs remembers many recent kills, not just the last one. + +@table @kbd +@item C-y +Yank last killed text (@code{yank}). +@item M-y +Replace text just yanked with an earlier batch of killed text +(@code{yank-pop}). +@item M-w +Save region as last killed text without actually killing it +(@code{kill-ring-save}). Some systems call this ``copying.'' +@item C-M-w +Append next kill to last batch of killed text (@code{append-next-kill}). +@end table + + On graphical displays with window systems, if there is a current +selection in some other application, and you selected it more recently +than you killed any text in Emacs, @kbd{C-y} copies the selection +instead of text killed within Emacs. + +@menu +* Kill Ring:: Where killed text is stored. Basic yanking. +* Appending Kills:: Several kills in a row all yank together. +* Earlier Kills:: Yanking something killed some time ago. +@end menu + +@node Kill Ring +@subsection The Kill Ring + + All killed text is recorded in the @dfn{kill ring}, a list of blocks of +text that have been killed. There is only one kill ring, shared by all +buffers, so you can kill text in one buffer and yank it in another buffer. +This is the usual way to move text from one file to another. +(@xref{Accumulating Text}, for some other ways.) + +@kindex C-y +@findex yank + The command @kbd{C-y} (@code{yank}) reinserts the text of the most recent +kill. It leaves the cursor at the end of the text. It sets the mark at +the beginning of the text. @xref{Mark}. + + @kbd{C-u C-y} leaves the cursor in front of the text, and sets the +mark after it. This happens only if the argument is specified with just +a @kbd{C-u}, precisely. Any other sort of argument, including @kbd{C-u} +and digits, specifies an earlier kill to yank (@pxref{Earlier Kills}). + +@cindex yanking and text properties +@vindex yank-excluded-properties + The yank commands discard certain text properties from the text that +is yanked, those that might lead to annoying results. For instance, +they discard text properties that respond to the mouse or specify key +bindings. The variable @code{yank-excluded-properties} specifies the +properties to discard. Yanking of register contents and rectangles +also discard these properties. + +@kindex M-w +@findex kill-ring-save + To copy a block of text, you can use @kbd{M-w} +(@code{kill-ring-save}), which copies the region into the kill ring +without removing it from the buffer. This is approximately equivalent +to @kbd{C-w} followed by @kbd{C-x u}, except that @kbd{M-w} does not +alter the undo history and does not temporarily change the screen. + +@node Appending Kills +@subsection Appending Kills + +@cindex appending kills in the ring +@cindex television + Normally, each kill command pushes a new entry onto the kill ring. +However, two or more kill commands in a row combine their text into a +single entry, so that a single @kbd{C-y} yanks all the text as a unit, +just as it was before it was killed. + + Thus, if you want to yank text as a unit, you need not kill all of it +with one command; you can keep killing line after line, or word after +word, until you have killed it all, and you can still get it all back at +once. + + Commands that kill forward from point add onto the end of the previous +killed text. Commands that kill backward from point add text onto the +beginning. This way, any sequence of mixed forward and backward kill +commands puts all the killed text into one entry without rearrangement. +Numeric arguments do not break the sequence of appending kills. For +example, suppose the buffer contains this text: + +@example +This is a line @point{}of sample text. +@end example + +@noindent +with point shown by @point{}. If you type @kbd{M-d M-@key{DEL} M-d +M-@key{DEL}}, killing alternately forward and backward, you end up with +@samp{a line of sample} as one entry in the kill ring, and @samp{This +is@ @ text.} in the buffer. (Note the double space between @samp{is} +and @samp{text}, which you can clean up with @kbd{M-@key{SPC}} or +@kbd{M-q}.) + + Another way to kill the same text is to move back two words with +@kbd{M-b M-b}, then kill all four words forward with @kbd{C-u M-d}. +This produces exactly the same results in the buffer and in the kill +ring. @kbd{M-f M-f C-u M-@key{DEL}} kills the same text, all going +backward; once again, the result is the same. The text in the kill ring +entry always has the same order that it had in the buffer before you +killed it. + +@kindex C-M-w +@findex append-next-kill + If a kill command is separated from the last kill command by other +commands (not just numeric arguments), it starts a new entry on the kill +ring. But you can force it to append by first typing the command +@kbd{C-M-w} (@code{append-next-kill}) right before it. The @kbd{C-M-w} +tells the following command, if it is a kill command, to append the text +it kills to the last killed text, instead of starting a new entry. With +@kbd{C-M-w}, you can kill several separated pieces of text and +accumulate them to be yanked back in one place.@refill + + A kill command following @kbd{M-w} does not append to the text that +@kbd{M-w} copied into the kill ring. + +@node Earlier Kills +@subsection Yanking Earlier Kills + +@cindex yanking previous kills +@kindex M-y +@findex yank-pop + To recover killed text that is no longer the most recent kill, use the +@kbd{M-y} command (@code{yank-pop}). It takes the text previously +yanked and replaces it with the text from an earlier kill. So, to +recover the text of the next-to-the-last kill, first use @kbd{C-y} to +yank the last kill, and then use @kbd{M-y} to replace it with the +previous kill. @kbd{M-y} is allowed only after a @kbd{C-y} or another +@kbd{M-y}. + + You can understand @kbd{M-y} in terms of a ``last yank'' pointer which +points at an entry in the kill ring. Each time you kill, the ``last +yank'' pointer moves to the newly made entry at the front of the ring. +@kbd{C-y} yanks the entry which the ``last yank'' pointer points to. +@kbd{M-y} moves the ``last yank'' pointer to a different entry, and the +text in the buffer changes to match. Enough @kbd{M-y} commands can move +the pointer to any entry in the ring, so you can get any entry into the +buffer. Eventually the pointer reaches the end of the ring; the next +@kbd{M-y} loops back around to the first entry again. + + @kbd{M-y} moves the ``last yank'' pointer around the ring, but it does +not change the order of the entries in the ring, which always runs from +the most recent kill at the front to the oldest one still remembered. + + @kbd{M-y} can take a numeric argument, which tells it how many entries +to advance the ``last yank'' pointer by. A negative argument moves the +pointer toward the front of the ring; from the front of the ring, it +moves ``around'' to the last entry and continues forward from there. + + Once the text you are looking for is brought into the buffer, you can +stop doing @kbd{M-y} commands and it will stay there. It's just a copy +of the kill ring entry, so editing it in the buffer does not change +what's in the ring. As long as no new killing is done, the ``last +yank'' pointer remains at the same place in the kill ring, so repeating +@kbd{C-y} will yank another copy of the same previous kill. + + If you know how many @kbd{M-y} commands it would take to find the +text you want, you can yank that text in one step using @kbd{C-y} with +a numeric argument. @kbd{C-y} with an argument restores the text from +the specified kill ring entry, counting back from the most recent as +1. Thus, @kbd{C-u 2 C-y} gets the next-to-the-last block of killed +text---it is equivalent to @kbd{C-y M-y}. @kbd{C-y} with a numeric +argument starts counting from the ``last yank'' pointer, and sets the +``last yank'' pointer to the entry that it yanks. + +@vindex kill-ring-max + The length of the kill ring is controlled by the variable +@code{kill-ring-max}; no more than that many blocks of killed text are +saved. + +@vindex kill-ring + The actual contents of the kill ring are stored in a variable named +@code{kill-ring}; you can view the entire contents of the kill ring with +the command @kbd{C-h v kill-ring}. + +@node Accumulating Text, Rectangles, Yanking, Top +@section Accumulating Text +@findex append-to-buffer +@findex prepend-to-buffer +@findex copy-to-buffer +@findex append-to-file + +@cindex accumulating scattered text + Usually we copy or move text by killing it and yanking it, but there +are other convenient methods for copying one block of text in many +places, or for copying many scattered blocks of text into one place. To +copy one block to many places, store it in a register +(@pxref{Registers}). Here we describe the commands to accumulate +scattered pieces of text into a buffer or into a file. + +@table @kbd +@item M-x append-to-buffer +Append region to the contents of a specified buffer. +@item M-x prepend-to-buffer +Prepend region to the contents of a specified buffer. +@item M-x copy-to-buffer +Copy region into a specified buffer, deleting that buffer's old contents. +@item M-x insert-buffer +Insert the contents of a specified buffer into current buffer at point. +@item M-x append-to-file +Append region to the contents of a specified file, at the end. +@end table + + To accumulate text into a buffer, use @kbd{M-x append-to-buffer}. +This reads a buffer name, then inserts a copy of the region into the +buffer specified. If you specify a nonexistent buffer, +@code{append-to-buffer} creates the buffer. The text is inserted +wherever point is in that buffer. If you have been using the buffer for +editing, the copied text goes into the middle of the text of the buffer, +starting from wherever point happens to be at that moment. + + Point in that buffer is left at the end of the copied text, so +successive uses of @code{append-to-buffer} accumulate the text in the +specified buffer in the same order as they were copied. Strictly +speaking, @code{append-to-buffer} does not always append to the text +already in the buffer---it appends only if point in that buffer is at the end. +However, if @code{append-to-buffer} is the only command you use to alter +a buffer, then point is always at the end. + + @kbd{M-x prepend-to-buffer} is just like @code{append-to-buffer} +except that point in the other buffer is left before the copied text, so +successive prependings add text in reverse order. @kbd{M-x +copy-to-buffer} is similar, except that any existing text in the other +buffer is deleted, so the buffer is left containing just the text newly +copied into it. + + To retrieve the accumulated text from another buffer, use the +command @kbd{M-x insert-buffer}; this too takes @var{buffername} as an +argument. It inserts a copy of the whole text in buffer +@var{buffername} into the current buffer at point, and sets the mark +after the inserted text. Alternatively, you can select the other +buffer for editing, then copy text from it by killing. +@xref{Buffers}, for background information on buffers. + + Instead of accumulating text within Emacs, in a buffer, you can append +text directly into a file with @kbd{M-x append-to-file}, which takes +@var{filename} as an argument. It adds the text of the region to the end +of the specified file. The file is changed immediately on disk. + + You should use @code{append-to-file} only with files that are +@emph{not} being visited in Emacs. Using it on a file that you are +editing in Emacs would change the file behind Emacs's back, which +can lead to losing some of your editing. + +@node Rectangles, CUA Bindings, Accumulating Text, Top +@section Rectangles +@cindex rectangle +@cindex columns (and rectangles) +@cindex killing rectangular areas of text + + The rectangle commands operate on rectangular areas of the text: all +the characters between a certain pair of columns, in a certain range of +lines. Commands are provided to kill rectangles, yank killed rectangles, +clear them out, fill them with blanks or text, or delete them. Rectangle +commands are useful with text in multicolumn formats, and for changing +text into or out of such formats. + +@cindex mark rectangle + When you must specify a rectangle for a command to work on, you do it +by putting the mark at one corner and point at the opposite corner. The +rectangle thus specified is called the @dfn{region-rectangle} because +you control it in much the same way as the region is controlled. But +remember that a given combination of point and mark values can be +interpreted either as a region or as a rectangle, depending on the +command that uses them. + + If point and the mark are in the same column, the rectangle they +delimit is empty. If they are in the same line, the rectangle is one +line high. This asymmetry between lines and columns comes about +because point (and likewise the mark) is between two columns, but within +a line. + +@table @kbd +@item C-x r k +Kill the text of the region-rectangle, saving its contents as the +``last killed rectangle'' (@code{kill-rectangle}). +@item C-x r d +Delete the text of the region-rectangle (@code{delete-rectangle}). +@item C-x r y +Yank the last killed rectangle with its upper left corner at point +(@code{yank-rectangle}). +@item C-x r o +Insert blank space to fill the space of the region-rectangle +(@code{open-rectangle}). This pushes the previous contents of the +region-rectangle rightward. +@item C-x r c +Clear the region-rectangle by replacing all of its contents with spaces +(@code{clear-rectangle}). +@item M-x delete-whitespace-rectangle +Delete whitespace in each of the lines on the specified rectangle, +starting from the left edge column of the rectangle. +@item C-x r t @var{string} @key{RET} +Replace rectangle contents with @var{string} on each line +(@code{string-rectangle}). +@item M-x string-insert-rectangle @key{RET} @var{string} @key{RET} +Insert @var{string} on each line of the rectangle. +@end table + + The rectangle operations fall into two classes: commands for +deleting and inserting rectangles, and commands for blank rectangles. + +@kindex C-x r k +@kindex C-x r d +@findex kill-rectangle +@findex delete-rectangle + There are two ways to get rid of the text in a rectangle: you can +discard the text (delete it) or save it as the ``last killed'' +rectangle. The commands for these two ways are @kbd{C-x r d} +(@code{delete-rectangle}) and @kbd{C-x r k} (@code{kill-rectangle}). In +either case, the portion of each line that falls inside the rectangle's +boundaries is deleted, causing any following text on the line to +move left into the gap. + + Note that ``killing'' a rectangle is not killing in the usual sense; the +rectangle is not stored in the kill ring, but in a special place that +can only record the most recent rectangle killed. This is because yanking +a rectangle is so different from yanking linear text that different yank +commands have to be used. It is hard to define yank-popping for rectangles, +so we do not try. + +@kindex C-x r y +@findex yank-rectangle + To yank the last killed rectangle, type @kbd{C-x r y} +(@code{yank-rectangle}). Yanking a rectangle is the opposite of killing +one. Point specifies where to put the rectangle's upper left corner. +The rectangle's first line is inserted there, the rectangle's second +line is inserted at the same horizontal position, but one line +vertically down, and so on. The number of lines affected is determined +by the height of the saved rectangle. + + You can convert single-column lists into double-column lists using +rectangle killing and yanking; kill the second half of the list as a +rectangle and then yank it beside the first line of the list. +@xref{Two-Column}, for another way to edit multi-column text. + + You can also copy rectangles into and out of registers with @kbd{C-x r +r @var{r}} and @kbd{C-x r i @var{r}}. @xref{RegRect,,Rectangle +Registers}. + +@kindex C-x r o +@findex open-rectangle +@kindex C-x r c +@findex clear-rectangle + There are two commands you can use for making blank rectangles: +@kbd{C-x r c} (@code{clear-rectangle}) which blanks out existing text, +and @kbd{C-x r o} (@code{open-rectangle}) which inserts a blank +rectangle. Clearing a rectangle is equivalent to deleting it and then +inserting a blank rectangle of the same size. + +@findex delete-whitespace-rectangle + The command @kbd{M-x delete-whitespace-rectangle} deletes horizontal +whitespace starting from a particular column. This applies to each of +the lines in the rectangle, and the column is specified by the left +edge of the rectangle. The right edge of the rectangle does not make +any difference to this command. + +@kindex C-x r t +@findex string-rectangle + The command @kbd{C-x r t} (@code{string-rectangle}) replaces the +contents of a region-rectangle with a string on each line. The +string's width need not be the same as the width of the rectangle. If +the string's width is less, the text after the rectangle shifts left; +if the string is wider than the rectangle, the text after the +rectangle shifts right. + +@findex string-insert-rectangle + The command @kbd{M-x string-insert-rectangle} is similar to +@code{string-rectangle}, but inserts the string on each line, +shifting the original text to the right. + +@node CUA Bindings, Registers, Rectangles, Top +@section CUA Bindings +@findex cua-mode +@vindex cua-mode +@cindex CUA key bindings +@vindex cua-enable-cua-keys + The command @kbd{M-x cua-mode} sets up key bindings that are +compatible with the Common User Access (CUA) system used in many other +applications. @kbd{C-x} means cut (kill), @kbd{C-c} copy, @kbd{C-v} +paste (yank), and @kbd{C-z} undo. Standard Emacs commands like +@kbd{C-x C-c} still work, because @kbd{C-x} and @kbd{C-c} only take +effect when the mark is active (and the region is highlighted). +However, if you don't want to override these bindings in Emacs at all, +set @code{cua-enable-cua-keys} to @code{nil}. + + In CUA mode, using @kbd{Shift} together with the movement keys +activates and highlights the region over which they move. The +standard (unshifted) movement keys deactivate the mark, and typed text +replaces the active region as in Delete-Selection mode +(@pxref{Mouse Commands}). + + To enter an Emacs command like @kbd{C-x C-f} while the mark is +active, use one of the following methods: either hold @kbd{Shift} +together with the prefix key, e.g. @kbd{S-C-x C-f}, or quickly type +the prefix key twice, e.g. @kbd{C-x C-x C-f}. + +@cindex rectangle highlighting + CUA mode provides enhanced rectangle support with visible +rectangle highlighting. Use @kbd{C-RET} to start a rectangle, +extend it using the movement commands, and cut or copy it using +@kbd{C-x} or @kbd{C-c}. @kbd{RET} moves the cursor to the next +(clockwise) corner of the rectangle, so you can easily expand it in +any direction. Normal text you type is inserted to the left or right +of each line in the rectangle (on the same side as the cursor). + + With CUA you can easily copy text and rectangles into and out of +registers by providing a one-digit numeric prefix to the kill, copy, +and yank commands, e.g. @kbd{C-1 C-c} copies the region into register +@code{1}, and @kbd{C-2 C-v} yanks the contents of register @code{2}. + +@cindex global mark + CUA mode also has a global mark feature which allows easy moving and +copying of text between buffers. Use @kbd{C-S-SPC} to toggle the +global mark on and off. When the global mark is on, all text that you +kill or copy is automatically inserted at the global mark, and text +you type is inserted at the global mark rather than at the current +position. + + For example, to copy words from various buffers into a word list in +a given buffer, set the global mark in the target buffer, then +navigate to each of the words you want in the list, mark it (e.g. with +@kbd{S-M-f}), copy it to the list with @kbd{C-c} or @kbd{M-w}, and +insert a newline after the word in the target list by pressing +@key{RET}. + +@ifnottex +@lowersections +@end ifnottex + +@ignore + arch-tag: d8da8f96-0928-449a-816e-ff2d3497866c +@end ignore diff --git a/doc/emacs/kmacro.texi b/doc/emacs/kmacro.texi new file mode 100644 index 00000000000..16526e1a2b8 --- /dev/null +++ b/doc/emacs/kmacro.texi @@ -0,0 +1,616 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Keyboard Macros, Files, Fixit, Top +@chapter Keyboard Macros +@cindex defining keyboard macros +@cindex keyboard macro + + In this chapter we describe how to record a sequence of editing +commands so you can repeat it conveniently later. + + A @dfn{keyboard macro} is a command defined by an Emacs user to stand for +another sequence of keys. For example, if you discover that you are +about to type @kbd{C-n M-d C-d} forty times, you can speed your work by +defining a keyboard macro to do @kbd{C-n M-d C-d}, and then executing +it 39 more times. + + You define a keyboard macro by executing and recording the commands +which are its definition. Put differently, as you define a keyboard +macro, the definition is being executed for the first time. This way, +you can see the effects of your commands, so that you don't have to +figure them out in your head. When you close the definition, the +keyboard macro is defined and also has been, in effect, executed once. +You can then do the whole thing over again by invoking the macro. + + Keyboard macros differ from ordinary Emacs commands in that they are +written in the Emacs command language rather than in Lisp. This makes it +easier for the novice to write them, and makes them more convenient as +temporary hacks. However, the Emacs command language is not powerful +enough as a programming language to be useful for writing anything +intelligent or general. For such things, Lisp must be used. + +@menu +* Basic Keyboard Macro:: Defining and running keyboard macros. +* Keyboard Macro Ring:: Where previous keyboard macros are saved. +* Keyboard Macro Counter:: Inserting incrementing numbers in macros. +* Keyboard Macro Query:: Making keyboard macros do different things each time. +* Save Keyboard Macro:: Giving keyboard macros names; saving them in files. +* Edit Keyboard Macro:: Editing keyboard macros. +* Keyboard Macro Step-Edit:: Interactively executing and editing a keyboard + macro. +@end menu + +@node Basic Keyboard Macro +@section Basic Use + +@table @kbd +@item @key{F3} +@itemx C-x ( +Start defining a keyboard macro (@code{kmacro-start-macro}). +@item @key{F4} +If a keyboard macro is being defined, end the definition; otherwise, +execute the most recent keyboard macro +(@code{kmacro-end-or-call-macro}). +@item C-x ) +End the definition of a keyboard macro (@code{kmacro-end-macro}). +@item C-x e +Execute the most recent keyboard macro (@code{kmacro-end-and-call-macro}). +First end the definition of the keyboard macro, if currently defining it. +To immediately execute the keyboard macro again, just repeat the @kbd{e}. +@item C-u C-x ( +Re-execute last keyboard macro, then add more keys to its definition. +@item C-u C-u C-x ( +Add more keys to the last keyboard macro without re-executing it. +@item C-x C-k r +Run the last keyboard macro on each line that begins in the region +(@code{apply-macro-to-region-lines}). +@end table + +@kindex F3 +@kindex F4 +@kindex C-x ( +@kindex C-x ) +@kindex C-x e +@findex kmacro-start-macro +@findex kmacro-end-macro +@findex kmacro-end-and-call-macro + To start defining a keyboard macro, type the @kbd{F3} or @kbd{C-x (} command +(@code{kmacro-start-macro}). From then on, your keys continue to be +executed, but also become part of the definition of the macro. @samp{Def} +appears in the mode line to remind you of what is going on. When you are +finished, the @kbd{F4} or @kbd{C-x )} command (@code{kmacro-end-macro}) terminates the +definition (without becoming part of it!). For example, + +@example +C-x ( M-f foo C-x ) +@end example + +@noindent +defines a macro to move forward a word and then insert @samp{foo}. + + The macro thus defined can be invoked again with the @kbd{C-x e} +command (@code{kmacro-end-and-call-macro}), which may be given a +repeat count as a numeric argument to execute the macro many times. +If you enter @kbd{C-x e} while defining a macro, the macro is +terminated and executed immediately. + + After executing the macro with @kbd{C-x e}, you can use @kbd{e} +repeatedly to immediately repeat the macro one or more times. For example, + +@example +C-x ( xyz C-x e e e +@end example + +@noindent +inserts @samp{xyzxyzxyzxyz} in the current buffer. + + @kbd{C-x )} can also be given a repeat count as an argument, in +which case it repeats the macro that many times right after defining +it, but defining the macro counts as the first repetition (since it is +executed as you define it). Therefore, giving @kbd{C-x )} an argument +of 4 executes the macro immediately 3 additional times. An argument +of zero to @kbd{C-x e} or @kbd{C-x )} means repeat the macro +indefinitely (until it gets an error or you type @kbd{C-g} or, on +MS-DOS, @kbd{C-@key{BREAK}}). + + The key @key{F4} is like a combination of @kbd{C-x )} and @kbd{C-x +e}. If you're defining a macro, @key{F4} ends the definition. +Otherwise it executes the last macro. For example, + +@example +F3 xyz F4 F4 F4 +@end example + +@noindent +inserts @samp{xyzxyzxyz} in the current buffer. + + If you wish to repeat an operation at regularly spaced places in the +text, define a macro and include as part of the macro the commands to move +to the next place you want to use it. For example, if you want to change +each line, you should position point at the start of a line, and define a +macro to change that line and leave point at the start of the next line. +Then repeating the macro will operate on successive lines. + + When a command reads an argument with the minibuffer, your +minibuffer input becomes part of the macro along with the command. So +when you replay the macro, the command gets the same argument as +when you entered the macro. For example, + +@example +C-x ( C-a C-@key{SPC} C-n M-w C-x b f o o @key{RET} C-y C-x b @key{RET} C-x ) +@end example + +@noindent +defines a macro that copies the current line into the buffer +@samp{foo}, then returns to the original buffer. + + You can use function keys in a keyboard macro, just like keyboard +keys. You can even use mouse events, but be careful about that: when +the macro replays the mouse event, it uses the original mouse position +of that event, the position that the mouse had while you were defining +the macro. The effect of this may be hard to predict. (Using the +current mouse position would be even less predictable.) + + One thing that sometimes works badly in a keyboard macro is the +command @kbd{C-M-c} (@code{exit-recursive-edit}). When this command +exits a recursive edit that started within the macro, it works as +you'd expect. But if it exits a recursive edit that started before +you invoked the keyboard macro, it also necessarily exits the keyboard +macro as part of the process. + + After you have terminated the definition of a keyboard macro, you can add +to the end of its definition by typing @kbd{C-u F3} or @kbd{C-u C-x (}. +This is equivalent +to plain @kbd{C-x (} followed by retyping the whole definition so far. As +a consequence it re-executes the macro as previously defined. + + You can also add to the end of the definition of the last keyboard +macro without re-executing it by typing @kbd{C-u C-u C-x (}. + + The variable @code{kmacro-execute-before-append} specifies whether +a single @kbd{C-u} prefix causes the existing macro to be re-executed +before appending to it. + +@findex apply-macro-to-region-lines +@kindex C-x C-k r + The command @kbd{C-x C-k r} (@code{apply-macro-to-region-lines}) +repeats the last defined keyboard macro on each line that begins in +the region. It does this line by line, by moving point to the +beginning of the line and then executing the macro. + +@node Keyboard Macro Ring +@section The Keyboard Macro Ring + + All defined keyboard macros are recorded in the ``keyboard macro ring,'' +a list of sequences of keys. There is only one keyboard macro ring, +shared by all buffers. + +@table @kbd +@item C-x C-k C-k +Execute the keyboard macro at the head of the ring (@code{kmacro-end-or-call-macro-repeat}). +@item C-x C-k C-n +Rotate the keyboard macro ring to the next macro (defined earlier) +(@code{kmacro-cycle-ring-next}). +@item C-x C-k C-p +Rotate the keyboard macro ring to the previous macro (defined later) +(@code{kmacro-cycle-ring-previous}). +@end table + + All commands which operate on the keyboard macro ring use the +same @kbd{C-x C-k} prefix. Most of these commands can be executed and +repeated immediately after each other without repeating the @kbd{C-x +C-k} prefix. For example, + +@example +C-x C-k C-p C-p C-k C-k C-k C-n C-n C-k C-p C-k C-d +@end example + +@noindent +will rotate the keyboard macro ring to the ``second previous'' macro, +execute the resulting head macro three times, rotate back to the +original head macro, execute that once, rotate to the ``previous'' +macro, execute that, and finally delete it from the macro ring. + +@findex kmacro-end-or-call-macro-repeat +@kindex C-x C-k C-k + The command @kbd{C-x C-k C-k} (@code{kmacro-end-or-call-macro-repeat}) +executes the keyboard macro at the head of the macro ring. You can +repeat the macro immediately by typing another @kbd{C-k}, or you can +rotate the macro ring immediately by typing @kbd{C-n} or @kbd{C-p}. + + When a keyboard macro is being defined, @kbd{C-x C-k C-k} behaves like +@kbd{C-x )} except that, immediately afterward, you can use most key +bindings of this section without the @kbd{C-x C-k} prefix. For +instance, another @kbd{C-k} will re-execute the macro. + +@findex kmacro-cycle-ring-next +@kindex C-x C-k C-n +@findex kmacro-cycle-ring-previous +@kindex C-x C-k C-p + The commands @kbd{C-x C-k C-n} (@code{kmacro-cycle-ring-next}) and +@kbd{C-x C-k C-p} (@code{kmacro-cycle-ring-previous}) rotate the +macro ring, bringing the next or previous keyboard macro to the head +of the macro ring. The definition of the new head macro is displayed +in the echo area. You can continue to rotate the macro ring +immediately by repeating just @kbd{C-n} and @kbd{C-p} until the +desired macro is at the head of the ring. To execute the new macro +ring head immediately, just type @kbd{C-k}. + + Note that Emacs treats the head of the macro ring as the ``last +defined keyboard macro.'' For instance, @kbd{C-x e} will execute that +macro, and @kbd{C-x C-k n} will give it a name. + +@ignore @c This interface is too kludgy + @c and the functionality duplicates the functionality above -- rms. +@findex kmacro-view-macro-repeat +@kindex C-x C-k C-v + The command @kbd{C-x C-k C-v} (@code{kmacro-view-macro-repeat}) +displays the last keyboard macro, or when repeated (with @kbd{C-v}), +it displays the previous macro on the macro ring, just like @kbd{C-x +C-k C-p}, but without actually rotating the macro ring. If you enter +@kbd{C-k} immediately after displaying a macro from the ring, that +macro is executed, but still without altering the macro ring. + + So while e.g. @kbd{C-x C-k C-p C-p C-p C-k C-k} makes the 3rd previous +macro the current macro and executes it twice, @kbd{C-x C-k C-v C-v +C-v C-k C-k} will display and execute the 3rd previous macro once and +then the current macro once. +@end ignore + +@ignore @c This is just too much feeping creaturism. + @c If you are reusing certain macros enough to want these, + @c you should give then names. -- rms +@findex kmacro-delete-ring-head +@kindex C-x C-k C-d + + The command @kbd{C-x C-k C-d} (@code{kmacro-delete-ring-head}) +removes and deletes the macro currently at the head of the macro +ring. You can use this to delete a macro that didn't work as +expected, or which you don't need anymore. + +@findex kmacro-swap-ring +@kindex C-x C-k C-t + + The command @kbd{C-x C-k C-t} (@code{kmacro-swap-ring}) +interchanges the head of the macro ring with the previous element on +the macro ring. + +@findex kmacro-call-ring-2nd-repeat +@kindex C-x C-k C-l + + The command @kbd{C-x C-k C-l} (@code{kmacro-call-ring-2nd-repeat}) +executes the previous (rather than the head) element on the macro ring. +@end ignore + +@vindex kmacro-ring-max + The maximum number of macros stored in the keyboard macro ring is +determined by the customizable variable @code{kmacro-ring-max}. + +@node Keyboard Macro Counter +@section The Keyboard Macro Counter + +@table @kbd +@item C-x C-k C-i +Insert the keyboard macro counter value in the buffer +(@code{kmacro-insert-counter}). +@item C-x C-k C-c +Set the keyboard macro counter (@code{kmacro-set-counter}). +@item C-x C-k C-a +Add the prefix arg to the keyboard macro counter (@code{kmacro-add-counter}). +@item C-x C-k C-f +Specify the format for inserting the keyboard macro counter +(@code{kmacro-set-format}). +@end table + + Each keyboard macro has an associated counter. Normally, the +macro counter is initialized to 0 when you start defining the macro, +and incremented by 1 after each insertion of the counter value; +that is, if you insert the macro counter twice while defining the +macro, the counter will increase by 2 on each repetition of the macro. + +@findex kmacro-insert-counter +@kindex C-x C-k C-i + The command @kbd{C-x C-k C-i} (@code{kmacro-insert-counter}) inserts +the current value of the current keyboard macro's counter, and +increments the counter by 1. You can use a numeric prefix argument to +specify a different increment. If you just specify a @kbd{C-u} +prefix, then the increment is zero, so it repeats the last inserted +counter value. For example, if you enter the following sequence while +defining a macro + +@example +C-x C-k C-i C-x C-k C-i C-u C-x C-k C-i C-x C-k C-i +@end example + +@noindent +it inserts @samp{0112} in the buffer. The next two iterations +of the macro will insert @samp{3445} and @samp{6778}. + + This command usually only makes sense while defining a keyboard +macro. But its behavior when no keyboard macro is being defined or +executed is predictable: it inserts and increments the counter of the +macro at the head of the keyboard macro ring. + +@findex kmacro-set-counter +@kindex C-x C-k C-c + The command @kbd{C-x C-k C-c} (@code{kmacro-set-counter}) sets the +current macro counter to the value of the numeric argument. If you use +it inside the macro, it operates on each repetition of the macro. If +you specify just @kbd{C-u} as the prefix, while executing the macro, +that resets the counter to the value it had at the beginning of the +current repetition of the macro (undoing any increments so far in this +repetition). + +@findex kmacro-add-counter +@kindex C-x C-k C-a + The command @kbd{C-x C-k C-a} (@code{kmacro-add-counter}) adds the +prefix argument to the current macro counter. With just @kbd{C-u} as +argument, it resets the counter to the last value inserted by any +keyboard macro. (Normally, when you use this, the last insertion +will be in the same macro and it will be the same counter.) + +@findex kmacro-set-format +@kindex C-x C-k C-f + The command @kbd{C-x C-k C-f} (@code{kmacro-set-format}) prompts for +the format to use when inserting the macro counter. The default +format is @samp{%d}, which means to insert the number in decimal +without any padding. You can exit with empty minibuffer to reset the +format to this default. You can specify any format string that the +@code{format} function accepts and that makes sense with a single +integer extra argument (@pxref{Formatting Strings,,, elisp, The Emacs +Lisp Reference Manual}). Do not put the format string inside double +quotes when you insert it in the minibuffer. + + If you use this command while no keyboard macro is being defined or +executed, the new format affects all subsequent macro definitions. +Existing macros continue to use the format in effect when they were +defined. If you set the format while defining a keyboard macro, this +affects the macro being defined from that point on, but it does not +affect subsequent macros. Execution of the macro will, at each step, +use the format in effect at that step during its definition. Changes +to the macro format during execution of a macro, like the +corresponding changes during its definition, have no effect on +subsequent macros. + + The format set by @kbd{C-x C-k C-f} does not affect insertion of +numbers stored in registers. + +@node Keyboard Macro Query +@section Executing Macros with Variations + +@table @kbd +@item C-x q +When this point is reached during macro execution, ask for confirmation +(@code{kbd-macro-query}). +@end table + +@kindex C-x q +@findex kbd-macro-query + Using @kbd{C-x q} (@code{kbd-macro-query}), you can get an effect +similar to that of @code{query-replace}, where the macro asks you each +time around whether to make a change. While defining the macro, +type @kbd{C-x q} at the point where you want the query to occur. During +macro definition, the @kbd{C-x q} does nothing, but when you run the +macro later, @kbd{C-x q} asks you interactively whether to continue. + + The valid responses when @kbd{C-x q} asks are @key{SPC} (or @kbd{y}), +@key{DEL} (or @kbd{n}), @key{RET} (or @kbd{q}), @kbd{C-l} and @kbd{C-r}. +The answers are the same as in @code{query-replace}, though not all of +the @code{query-replace} options are meaningful. + + These responses include @key{SPC} to continue, and @key{DEL} to skip +the remainder of this repetition of the macro and start right away with +the next repetition. @key{RET} means to skip the remainder of this +repetition and cancel further repetitions. @kbd{C-l} redraws the screen +and asks you again for a character to say what to do. + + @kbd{C-r} enters a recursive editing level, in which you can perform +editing which is not part of the macro. When you exit the recursive +edit using @kbd{C-M-c}, you are asked again how to continue with the +keyboard macro. If you type a @key{SPC} at this time, the rest of the +macro definition is executed. It is up to you to leave point and the +text in a state such that the rest of the macro will do what you +want.@refill + + @kbd{C-u C-x q}, which is @kbd{C-x q} with a numeric argument, +performs a completely different function. It enters a recursive edit +reading input from the keyboard, both when you type it during the +definition of the macro, and when it is executed from the macro. During +definition, the editing you do inside the recursive edit does not become +part of the macro. During macro execution, the recursive edit gives you +a chance to do some particularized editing on each repetition. +@xref{Recursive Edit}. + + Another way to vary the behavior of a keyboard macro is to use a +register as a counter, incrementing it on each repetition of the macro. +@xref{RegNumbers}. + +@node Save Keyboard Macro +@section Naming and Saving Keyboard Macros + +@table @kbd +@item C-x C-k n +Give a command name (for the duration of the Emacs session) to the most +recently defined keyboard macro (@code{kmacro-name-last-macro}). +@item C-x C-k b +Bind the most recently defined keyboard macro to a key sequence (for +the duration of the session) (@code{kmacro-bind-to-key}). +@item M-x insert-kbd-macro +Insert in the buffer a keyboard macro's definition, as Lisp code. +@end table + +@cindex saving keyboard macros +@findex kmacro-name-last-macro +@kindex C-x C-k n + If you wish to save a keyboard macro for later use, you can give it +a name using @kbd{C-x C-k n} (@code{kmacro-name-last-macro}). +This reads a name as an argument using the minibuffer and defines that +name to execute the last keyboard macro, in its current form. (If you +later add to the definition of this macro, that does not alter the +name's definition as a macro.) The macro name is a Lisp symbol, and +defining it in this way makes it a valid command name for calling with +@kbd{M-x} or for binding a key to with @code{global-set-key} +(@pxref{Keymaps}). If you specify a name that has a prior definition +other than a keyboard macro, an error message is shown and nothing is +changed. + +@cindex binding keyboard macros +@findex kmacro-bind-to-key +@kindex C-x C-k b + You can also bind the last keyboard macro (in its current form) to a +key, using @kbd{C-x C-k b} (@code{kmacro-bind-to-key}) followed by the +key sequence you want to bind. You can bind to any key sequence in +the global keymap, but since most key sequences already have other +bindings, you should select the key sequence carefully. If you try to +bind to a key sequence with an existing binding (in any keymap), this +command asks you for confirmation before replacing the existing binding. + + To avoid problems caused by overriding existing bindings, the key +sequences @kbd{C-x C-k 0} through @kbd{C-x C-k 9} and @kbd{C-x C-k A} +through @kbd{C-x C-k Z} are reserved for your own keyboard macro +bindings. In fact, to bind to one of these key sequences, you only +need to type the digit or letter rather than the whole key sequences. +For example, + +@example +C-x C-k b 4 +@end example + +@noindent +will bind the last keyboard macro to the key sequence @kbd{C-x C-k 4}. + +@findex insert-kbd-macro + Once a macro has a command name, you can save its definition in a file. +Then it can be used in another editing session. First, visit the file +you want to save the definition in. Then use this command: + +@example +M-x insert-kbd-macro @key{RET} @var{macroname} @key{RET} +@end example + +@noindent +This inserts some Lisp code that, when executed later, will define the +same macro with the same definition it has now. (You need not +understand Lisp code to do this, because @code{insert-kbd-macro} writes +the Lisp code for you.) Then save the file. You can load the file +later with @code{load-file} (@pxref{Lisp Libraries}). If the file you +save in is your init file @file{~/.emacs} (@pxref{Init File}) then the +macro will be defined each time you run Emacs. + + If you give @code{insert-kbd-macro} a numeric argument, it makes +additional Lisp code to record the keys (if any) that you have bound +to @var{macroname}, so that the macro will be reassigned the same keys +when you load the file. + +@node Edit Keyboard Macro +@section Editing a Keyboard Macro + +@table @kbd +@item C-x C-k C-e +Edit the last defined keyboard macro (@code{kmacro-edit-macro}). +@item C-x C-k e @var{name} @key{RET} +Edit a previously defined keyboard macro @var{name} (@code{edit-kbd-macro}). +@item C-x C-k l +Edit the last 100 keystrokes as a keyboard macro +(@code{kmacro-edit-lossage}). +@end table + +@findex kmacro-edit-macro +@kindex C-x C-k C-e +@kindex C-x C-k RET + You can edit the last keyboard macro by typing @kbd{C-x C-k C-e} or +@kbd{C-x C-k RET} (@code{kmacro-edit-macro}). This formats the macro +definition in a buffer and enters a specialized major mode for editing +it. Type @kbd{C-h m} once in that buffer to display details of how to +edit the macro. When you are finished editing, type @kbd{C-c C-c}. + +@findex edit-kbd-macro +@kindex C-x C-k e + You can edit a named keyboard macro or a macro bound to a key by typing +@kbd{C-x C-k e} (@code{edit-kbd-macro}). Follow that with the +keyboard input that you would use to invoke the macro---@kbd{C-x e} or +@kbd{M-x @var{name}} or some other key sequence. + +@findex kmacro-edit-lossage +@kindex C-x C-k l + You can edit the last 100 keystrokes as a macro by typing +@kbd{C-x C-k l} (@code{kmacro-edit-lossage}). + +@node Keyboard Macro Step-Edit +@section Stepwise Editing a Keyboard Macro + +@findex kmacro-step-edit-macro +@kindex C-x C-k SPC + You can interactively replay and edit the last keyboard +macro, one command at a time, by typing @kbd{C-x C-k SPC} +(@code{kmacro-step-edit-macro}). Unless you quit the macro using +@kbd{q} or @kbd{C-g}, the edited macro replaces the last macro on the +macro ring. + + This macro editing feature shows the last macro in the minibuffer +together with the first (or next) command to be executed, and prompts +you for an action. You can enter @kbd{?} to get a summary of your +options. These actions are available: + +@itemize @bullet{} +@item +@kbd{SPC} and @kbd{y} execute the current command, and advance to the +next command in the keyboard macro. +@item +@kbd{n}, @kbd{d}, and @kbd{DEL} skip and delete the current command. +@item +@kbd{f} skips the current command in this execution of the keyboard +macro, but doesn't delete it from the macro. +@item +@kbd{@key{TAB}} executes the current command, as well as all similar +commands immediately following the current command; for example, @key{TAB} +may be used to insert a sequence of characters (corresponding to a +sequence of @code{self-insert-command} commands). +@item +@kbd{c} continues execution (without further editing) until the end of +the keyboard macro. If execution terminates normally, the edited +macro replaces the original keyboard macro. +@item +@kbd{C-k} skips and deletes the rest of the keyboard macro, +terminates step-editing, and replaces the original keyboard macro +with the edited macro. +@item +@kbd{q} and @kbd{C-g} cancels the step-editing of the keyboard macro; +discarding any changes made to the keyboard macro. +@item +@kbd{i KEY... C-j} reads and executes a series of key sequences (not +including the final @kbd{C-j}), and inserts them before the current +command in the keyboard macro, without advancing over the current +command. +@item +@kbd{I KEY...} reads one key sequence, executes it, and inserts it +before the current command in the keyboard macro, without advancing +over the current command. +@item +@kbd{r KEY... C-j} reads and executes a series of key sequences (not +including the final @kbd{C-j}), and replaces the current command in +the keyboard macro with them, advancing over the inserted key +sequences. +@item +@kbd{R KEY...} reads one key sequence, executes it, and replaces the +current command in the keyboard macro with that key sequence, +advancing over the inserted key sequence. +@item +@kbd{a KEY... C-j} executes the current command, then reads and +executes a series of key sequences (not including the final +@kbd{C-j}), and inserts them after the current command in the keyboard +macro; it then advances over the current command and the inserted key +sequences. +@item +@kbd{A KEY... C-j} executes the rest of the commands in the keyboard +macro, then reads and executes a series of key sequences (not +including the final @kbd{C-j}), and appends them at the end of the +keyboard macro; it then terminates the step-editing and replaces the +original keyboard macro with the edited macro. +@end itemize + +@ignore + arch-tag: c1b0dd3b-3159-4c08-928f-52e763953e9c +@end ignore diff --git a/doc/emacs/m-x.texi b/doc/emacs/m-x.texi new file mode 100644 index 00000000000..7a5b80fd348 --- /dev/null +++ b/doc/emacs/m-x.texi @@ -0,0 +1,75 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2001, 2002, +@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node M-x, Help, Minibuffer, Top +@chapter Running Commands by Name + + Every Emacs command has a name that you can use to run it. For +convenience, many commands also have key bindings. You can run those +commands by typing the keys, or run them by name. Most Emacs commands +have no key bindings, so the only way to run them is by name. +(@xref{Key Bindings}, for how to set up key bindings.) + + By convention, a command name consists of one or more words, +separated by hyphens; for example, @code{auto-fill-mode} or +@code{manual-entry}. Command names mostly use complete English words +to make them easier to remember. + +@kindex M-x + To run a command by name, start with @kbd{M-x}, type the command +name, then terminate it with @key{RET}. @kbd{M-x} uses the minibuffer +to read the command name. The string @samp{M-x} appears at the +beginning of the minibuffer as a @dfn{prompt} to remind you to enter a +command name to be run. @key{RET} exits the minibuffer and runs the +command. @xref{Minibuffer}, for more information on the minibuffer. + + You can use completion to enter the command name. For example, +to invoke the command @code{forward-char}, you can type + +@example +M-x forward-char @key{RET} +@end example + +@noindent +or + +@example +M-x forw @key{TAB} c @key{RET} +@end example + +@noindent +Note that @code{forward-char} is the same command that you invoke with +the key @kbd{C-f}. The existence of a key binding does not stop you +from running the command by name. + + To cancel the @kbd{M-x} and not run a command, type @kbd{C-g} instead +of entering the command name. This takes you back to command level. + + To pass a numeric argument to the command you are invoking with +@kbd{M-x}, specify the numeric argument before @kbd{M-x}. The +argument value appears in the prompt while the command name is being +read, and finally @kbd{M-x} passes the argument to that command. + +@vindex suggest-key-bindings + When the command you run with @kbd{M-x} has a key binding, Emacs +mentions this in the echo area after running the command. For +example, if you type @kbd{M-x forward-word}, the message says that you +can run the same command by typing @kbd{M-f}. You can turn off these +messages by setting the variable @code{suggest-key-bindings} to +@code{nil}. + + In this manual, when we speak of running a command by name, we often +omit the @key{RET} that terminates the name. Thus we might say +@kbd{M-x auto-fill-mode} rather than @kbd{M-x auto-fill-mode +@key{RET}}. We mention the @key{RET} only for emphasis, such as when +the command is followed by arguments. + +@findex execute-extended-command + @kbd{M-x} works by running the command +@code{execute-extended-command}, which is responsible for reading the +name of another command and invoking it. + +@ignore + arch-tag: b67bff53-9628-4666-b94e-eda972a7ba56 +@end ignore diff --git a/doc/emacs/macos.texi b/doc/emacs/macos.texi new file mode 100644 index 00000000000..28d7f43df8e --- /dev/null +++ b/doc/emacs/macos.texi @@ -0,0 +1,429 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 2000, 2001, 2002, 2003, 2004, +@c 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Mac OS, Microsoft Windows, Antinews, Top +@appendix Emacs and Mac OS +@cindex Mac OS +@cindex Macintosh + + This section briefly describes the peculiarities of using Emacs +under Mac OS with native window system support. For Mac OS X, Emacs +can be built either without window system support, with X11, or with +Carbon API. This section only applies to the Carbon build. For Mac +OS Classic, Emacs can be built with or without Carbon API, and this +section applies to either of them because they run on the native +window system. + + Emacs built on Mac OS X supports most of its major features except +display support of PostScript images. The following features of Emacs +are not supported on Mac OS Classic: unexec (@code{dump-emacs}), +asynchronous subprocesses (@code{start-process}), and networking +(@code{open-network-stream}). As a result, packages such as Gnus, +GUD, and Comint do not work. Synchronous subprocesses +(@code{call-process}) are supported on non-Carbon build, but +specially-crafted external programs are needed. Since external +programs to handle commands such as @code{print-buffer} and +@code{diff} are not available on Mac OS Classic, they are not +supported. Non-Carbon build on Mac OS Classic does not support some +features such as file dialogs, drag-and-drop, and Unicode menus. + +@menu +* Input: Mac Input. Keyboard and mouse input on Mac. +* Intl: Mac International. International character sets on Mac. +* Env: Mac Environment Variables. Setting environment variables for Emacs. +* Directories: Mac Directories. Volumes and directories on Mac. +* Font: Mac Font Specs. Specifying fonts on Mac. +* Functions: Mac Functions. Mac-specific Lisp functions. +@end menu + +@node Mac Input +@section Keyboard and Mouse Input on Mac +@cindex Meta (Mac OS) +@cindex keyboard coding (Mac OS) + +@vindex mac-control-modifier +@vindex mac-command-modifier +@vindex mac-option-modifier +@vindex mac-function-modifier + On Mac, Emacs can use @key{control}, @key{command}, @key{option}, and +laptop @key{function} keys as any of Emacs modifier keys except +@key{SHIFT} (i.e., @key{ALT}, @key{CTRL}, @key{HYPER}, @key{META}, and +@key{SUPER}). The assignment is controlled by the variables +@code{mac-control-modifier}, @code{mac-command-modifier}, +@code{mac-option-modifier}, and @code{mac-function-modifier}. The value +for each of these variables can be one of the following symbols: +@code{alt}, @code{control}, @code{hyper}, @code{meta}, @code{super}, and +@code{nil} (no particular assignment). By default, the @key{control} +key works as @key{CTRL}, and the @key{command} key as @key{META}. + + For the @key{option} key, if @code{mac-option-modifier} is set to +@code{nil}, which is the default, the key works as the normal +@key{option} key, i.e., dead-key processing will work. This is useful +for entering non-@acronym{ASCII} Latin characters directly from the +Mac keyboard, for example. + + Emacs recognizes the setting in the Keyboard control panel (Mac OS +Classic) or the International system preference pane (Mac OS X) and +supports international and alternative keyboard layouts (e.g., Dvorak). +Selecting one of the layouts from the keyboard layout pull-down menu +will affect how the keys typed on the keyboard are interpreted. + +@vindex mac-pass-command-to-system +@vindex mac-pass-control-to-system + Mac OS intercepts and handles certain key combinations (e.g., +@key{command}-@key{SPC} for switching input languages). These will not +be passed to Emacs. One can disable this interception by setting +@code{mac-pass-command-to-system} or @code{mac-pass-control-to-system} +to @code{nil}. + +@vindex mac-emulate-three-button-mouse + Especially for one-button mice, the multiple button feature can be +emulated by setting @code{mac-emulate-three-button-mouse} to @code{t} +or @code{reverse}. If set to @code{t} (@code{reverse}, respectively), +pressing the mouse button with the @key{option} key is recognized as +the second (third) button, and that with the @key{command} key is +recognized as the third (second) button. + +@vindex mac-wheel-button-is-mouse-2 + For multi-button mice, the wheel button and the secondary button are +recognized as the second and the third button, respectively. If +@code{mac-wheel-button-is-mouse-2} is set to @code{nil}, their roles +are exchanged. + +@node Mac International +@section International Character Set Support on Mac +@cindex Mac Roman coding system +@cindex clipboard support (Mac OS) + + Mac uses non-standard encodings for the upper 128 single-byte +characters. They also deviate from the ISO 2022 standard by using +character codes in the range 128-159. The coding systems +@code{mac-roman}, @code{mac-centraleurroman}, and @code{mac-cyrillic} +are used to represent these Mac encodings. + + You can use input methods provided either by LEIM (@pxref{Input +Methods}) or Mac OS to enter international characters. To use the +former, see the International Character Set Support section of the +manual (@pxref{International}). + + Emacs on Mac OS automatically changes the value of +@code{keyboard-coding-system} according to the current keyboard +layout. So users don't need to set it manually, and even if set, it +will be changed when the keyboard layout change is detected next time. + + The Mac clipboard and the Emacs kill ring (@pxref{Killing}) are +synchronized by default: you can yank a piece of text and paste it +into another Mac application, or cut or copy one in another Mac +application and yank it into a Emacs buffer. This feature can be +disabled by setting @code{x-select-enable-clipboard} to @code{nil}. +One can still do copy and paste with another application from the Edit +menu. + + On Mac, the role of the coding system for selection that is set by +@code{set-selection-coding-system} (@pxref{Communication Coding}) is +two-fold. First, it is used as a preferred coding system for the +traditional text flavor that does not specify any particular encodings +and is mainly used by applications on Mac OS Classic. Second, it +specifies the intermediate encoding for the UTF-16 text flavor that is +mainly used by applications on Mac OS X. + + When pasting UTF-16 text data from the clipboard, it is first +converted to the encoding specified by the selection coding system +using the converter in the Mac OS system, and then decoded into the +Emacs internal encoding using the converter in Emacs. If the first +conversion failed, then the UTF-16 data is directly converted to Emacs +internal encoding using the converter in Emacs. Copying UTF-16 text +to the clipboard goes through the inverse path. The reason for this +two-pass decoding is to avoid subtle differences in Unicode mappings +between the Mac OS system and Emacs such as various kinds of hyphens, +and to minimize users' customization. For example, users that mainly +use Latin characters would prefer Greek characters to be decoded into +the @code{mule-unicode-0100-24ff} charset, but Japanese users would +prefer them to be decoded into the @code{japanese-jisx0208} charset. +Since the coding system for selection is automatically set according +to the system locale setting, users usually don't have to set it +manually. + + The default language environment (@pxref{Language Environments}) is +set according to the locale setting at the startup time. On Mac OS, +the locale setting is consulted in the following order: + +@enumerate +@item +Environment variables @env{LC_ALL}, @env{LC_CTYPE} and @env{LANG} as +in other systems. + +@item +Preference @code{AppleLocale} that is set by default on Mac OS X 10.3 +and later. + +@item +Preference @code{AppleLanguages} that is set by default on Mac OS X +10.1 and later. + +@item +Variable @code{mac-system-locale} that is derived from the system +language and region codes. This variable is available on all +supported Mac OS versions including Mac OS Classic. +@end enumerate + + The default values of almost all variables about coding systems are +also set according to the language environment. So usually you don't +have to customize these variables manually. + +@node Mac Environment Variables +@section Environment Variables and Command Line Arguments. +@cindex environment variables (Mac OS) + + On Mac OS X, when Emacs is run in a terminal, it inherits the values +of environment variables from the shell from which it is invoked. +However, when it is run from the Finder as a GUI application, it only +inherits environment variable values defined in the file +@file{~/.MacOSX/environment.plist} that affects all the applications +invoked from the Finder or the @command{open} command. + + Command line arguments are specified like + +@example +/Applications/Emacs.app/Contents/MacOS/Emacs -g 80x25 & +@end example + +@noindent +if Emacs is installed at @file{/Applications/Emacs.app}. If Emacs is +invoked like this, then it also inherits the values of environment +variables from the shell from which it is invoked. + + On Mac OS Classic, environment variables and command line arguments +for Emacs can be set by modifying the @samp{STR#} resources 128 and +129, respectively. A common environment variable that one may want to +set is @samp{HOME}. + + The way to set an environment variable is by adding a string of the +form + +@example +ENV_VAR=VALUE +@end example + +@noindent +to resource @samp{STR#} number 128 using @code{ResEdit}. To set up the +program to use unibyte characters exclusively, for example, add the +string + +@example +EMACS_UNIBYTE=1 +@end example + +@cindex Mac Preferences + Although Emacs on Mac does not support X resources (@pxref{X +Resources}) directly, one can use the Preferences system in place of X +resources. For example, adding the line + +@example +Emacs.cursorType: bar +@end example + +@noindent +to @file{~/.Xresources} in X11 corresponds to the execution of + +@example +defaults write org.gnu.Emacs Emacs.cursorType bar +@end example + +@noindent +on Mac OS X. One can use boolean or numeric values as well as string +values as follows: + +@example +defaults write org.gnu.Emacs Emacs.toolBar -bool false +defaults write org.gnu.Emacs Emacs.lineSpacing -int 3 +@end example + +@noindent +Try @kbd{M-x man RET defaults RET} for the usage of the +@command{defaults} command. Alternatively, if you have Developer +Tools installed on Mac OS X, you can use Property List Editor to edit +the file @file{~/Library/Preferences/org.gnu.Emacs.plist}. + + +@node Mac Directories +@section Volumes and Directories on Mac +@cindex file names (Mac OS) + + This node applies to Mac OS Classic only. + + The directory structure in Mac OS Classic is seen by Emacs as + +@example +/@var{volumename}/@var{filename} +@end example + +So when Emacs requests a file name, doing file name completion on +@file{/} will display all volumes on the system. You can use @file{..} +to go up a directory level. + + On Mac OS Classic, to access files and folders on the desktop, look +in the folder @file{Desktop Folder} in your boot volume (this folder +is usually invisible in the Mac @code{Finder}). + + On Mac OS Classic, Emacs creates the Mac folder +@file{:Preferences:Emacs:} in the @file{System Folder} and uses it as +the temporary directory. Emacs maps the directory name @file{/tmp/} +to that. Therefore it is best to avoid naming a volume @file{tmp}. +If everything works correctly, the program should leave no files in it +when it exits. You should be able to set the environment variable +@code{TMPDIR} to use another directory but this folder will still be +created. + + +@node Mac Font Specs +@section Specifying Fonts on Mac +@cindex font names (Mac OS) + + It is rare that you need to specify a font name in Emacs; usually +you specify face attributes instead. For example, you can use 14pt +Courier by customizing the default face attributes for all frames: + +@lisp +(set-face-attribute 'default nil + :family "courier" :height 140) +@end lisp + +@noindent +Alternatively, an interactive one is also available +(@pxref{Face Customization}). + +But when you do need to specify a font name in Emacs on Mac, use a +standard X font name: + +@smallexample +-@var{maker}-@var{family}-@var{weight}-@var{slant}-@var{widthtype}-@var{style}@dots{} +@dots{}-@var{pixels}-@var{height}-@var{horiz}-@var{vert}-@var{spacing}-@var{width}-@var{charset} +@end smallexample + +@noindent +@xref{Font X}. Wildcards are supported as they are on X. + + Emacs on Mac OS Classic uses QuickDraw Text routines for drawing texts +by default. Emacs on Mac OS X uses @acronym{ATSUI, Apple Type Services +for Unicode Imaging} as well as QuickDraw Text, and most of the +characters other than Chinese, Japanese, and Korean ones are drawn using +the former by default. + + @acronym{ATSUI}-compatible fonts have maker name @code{apple} and +charset @code{iso10646-1}. For example, 12-point Monaco can be specified +by the name: + +@example +-apple-monaco-medium-r-normal--12-*-*-*-*-*-iso10646-1 +@end example + +Note that these names must be specified using a format containing all +14 @samp{-}s (not by +@samp{-apple-monaco-medium-r-normal--12-*-iso10646-1}, for instance), +because every @acronym{ATSUI}-compatible font is a scalable one. + + QuickDraw Text fonts have maker name @code{apple} and various charset +names other than @code{iso10646-1}. Native Apple fonts in Mac Roman +encoding has charset @code{mac-roman}. You can specify a +@code{mac-roman} font for @acronym{ASCII} characters like + +@smalllisp +(add-to-list + 'default-frame-alist + '(font . "-apple-monaco-medium-r-normal--13-*-*-*-*-*-mac-roman")) +@end smalllisp + +@noindent +but that does not extend to ISO-8859-1: specifying a @code{mac-roman} +font for Latin-1 characters introduces wrong glyphs. + + Native Apple Traditional Chinese, Simplified Chinese, Japanese, +Korean, Central European, Cyrillic, Symbol, and Dingbats fonts have +the charsets @samp{big5-0}, @samp{gb2312.1980-0}, +@samp{jisx0208.1983-sjis} and @samp{jisx0201.1976-0}, +@samp{ksc5601.1989-0}, @samp{mac-centraleurroman}, +@samp{mac-cyrillic}, @samp{mac-symbol}, and @samp{mac-dingbats}, +respectively. + + The use of @code{create-fontset-from-fontset-spec} (@pxref{Defining +Fontsets}) for defining fontsets often results in wrong ones especially +when using only OS-bundled QuickDraw Text fonts. The recommended way to +use them is to create a fontset using +@code{create-fontset-from-mac-roman-font}: + +@lisp +(create-fontset-from-mac-roman-font + "-apple-courier-medium-r-normal--13-*-*-*-*-*-mac-roman" + nil "foo") +@end lisp + +@noindent +and then optionally specifying Chinese, Japanese, or Korean font +families using @code{set-fontset-font}: + +@lisp +(set-fontset-font "fontset-foo" + 'chinese-gb2312 '("song" . "gb2312.1980-0")) +@end lisp + + Single-byte fonts converted from GNU fonts in BDF format, which are not +in the Mac Roman encoding, have foundry, family, and character sets +encoded in the names of their font suitcases. E.g., the font suitcase +@samp{ETL-Fixed-ISO8859-1} contains fonts which can be referred to by +the name @samp{-ETL-fixed-*-iso8859-1}. + +@vindex mac-allow-anti-aliasing + Mac OS X 10.2 or later can use two types of text renderings: Quartz 2D +(aka Core Graphics) and QuickDraw. By default, Emacs uses the former on +such versions. It can be changed by setting +@code{mac-allow-anti-aliasing} to @code{t} (Quartz 2D) or @code{nil} +(QuickDraw). Both @acronym{ATSUI} and QuickDraw Text drawings are +affected by the value of this variable. + + Appearance of text in small sizes will also be affected by the ``Turn +off text smoothing for font sizes @var{n} and smaller'' setting in the +General pane (Mac OS X 10.1 or 10.2) or in the Appearance pane (10.3 or +later) of the System Preferences. This threshold can alternatively be +set just for Emacs (i.e., not as the system-wide setting) using the +@command{defaults} command: + +@example +defaults write org.gnu.Emacs AppleAntiAliasingThreshold @var{n} +@end example + + +@node Mac Functions +@section Mac-Specific Lisp Functions +@cindex Lisp functions specific to Mac OS + +@findex do-applescript + The function @code{do-applescript} takes a string argument, +executes it as an AppleScript command, and returns the result as a +string. + +@findex mac-file-name-to-posix +@findex posix-file-name-to-mac + The function @code{mac-file-name-to-posix} takes a Mac file name and +returns the GNU or Unix equivalent. The function +@code{posix-file-name-to-mac} performs the opposite conversion. They +are useful for constructing AppleScript commands to be passed to +@code{do-applescript}. + +@findex mac-set-file-creator +@findex mac-get-file-creator +@findex mac-set-file-type +@findex mac-get-file-type + The functions @code{mac-set-file-creator}, +@code{mac-get-file-creator}, @code{mac-set-file-type}, and +@code{mac-get-file-type} can be used to set and get creator and file +codes. + +@findex mac-get-preference + The function @code{mac-get-preference} returns the preferences value +converted to a Lisp object for a specified key and application. + +@ignore + arch-tag: a822c2ab-4273-4997-927e-c153bb71dcf6 +@end ignore diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi new file mode 100644 index 00000000000..988d5890b8c --- /dev/null +++ b/doc/emacs/maintaining.texi @@ -0,0 +1,862 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1999, 2000, +@c 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Maintaining, Abbrevs, Building, Top +@chapter Maintaining Large Programs + + This chapter describes Emacs features for maintaining large +programs. The version control features (@pxref{Version Control}) are +also particularly useful for this purpose. + +@menu +* Change Log:: Maintaining a change history for your program. +* Format of ChangeLog:: What the change log file looks like. +* Tags:: Go direct to any function in your program in one + command. Tags remembers which file it is in. +@ifnottex +* Emerge:: A convenient way of merging two versions of a program. +@end ifnottex +@end menu + +@node Change Log +@section Change Logs + + A change log file contains a chronological record of when and why you +have changed a program, consisting of a sequence of entries describing +individual changes. Normally it is kept in a file called +@file{ChangeLog} in the same directory as the file you are editing, or +one of its parent directories. A single @file{ChangeLog} file can +record changes for all the files in its directory and all its +subdirectories. + +@cindex change log +@kindex C-x 4 a +@findex add-change-log-entry-other-window + The Emacs command @kbd{C-x 4 a} adds a new entry to the change log +file for the file you are editing +(@code{add-change-log-entry-other-window}). If that file is actually +a backup file, it makes an entry appropriate for the file's +parent---that is useful for making log entries for functions that +have been deleted in the current version. + + @kbd{C-x 4 a} visits the change log file and creates a new entry +unless the most recent entry is for today's date and your name. It +also creates a new item for the current file. For many languages, it +can even guess the name of the function or other object that was +changed. + +@vindex add-log-keep-changes-together + When the variable @code{add-log-keep-changes-together} is +non-@code{nil}, @kbd{C-x 4 a} adds to any existing item for the file +rather than starting a new item. + +@vindex add-log-always-start-new-record + If @code{add-log-always-start-new-record} is non-@code{nil}, +@kbd{C-x 4 a} always makes a new entry, even if the last entry +was made by you and on the same date. + +@vindex change-log-version-info-enabled +@vindex change-log-version-number-regexp-list +@cindex file version in change log entries + If the value of the variable @code{change-log-version-info-enabled} +is non-@code{nil}, @kbd{C-x 4 a} adds the file's version number to the +change log entry. It finds the version number by searching the first +ten percent of the file, using regular expressions from the variable +@code{change-log-version-number-regexp-list}. + +@cindex Change Log mode +@findex change-log-mode + The change log file is visited in Change Log mode. In this major +mode, each bunch of grouped items counts as one paragraph, and each +entry is considered a page. This facilitates editing the entries. +@kbd{C-j} and auto-fill indent each new line like the previous line; +this is convenient for entering the contents of an entry. + +@findex change-log-merge + You can use the command @kbd{M-x change-log-merge} to merge other +log files into a buffer in Change Log Mode, preserving the date +ordering of entries. + + Version control systems are another way to keep track of changes in your +program and keep a change log. @xref{Log Buffer}. + +@node Format of ChangeLog +@section Format of ChangeLog + + A change log entry starts with a header line that contains the current +date, your name, and your email address (taken from the variable +@code{add-log-mailing-address}). Aside from these header lines, every +line in the change log starts with a space or a tab. The bulk of the +entry consists of @dfn{items}, each of which starts with a line starting +with whitespace and a star. Here are two entries, both dated in May +1993, with two items and one item respectively. + +@iftex +@medbreak +@end iftex +@smallexample +1993-05-25 Richard Stallman <rms@@gnu.org> + + * man.el: Rename symbols `man-*' to `Man-*'. + (manual-entry): Make prompt string clearer. + + * simple.el (blink-matching-paren-distance): + Change default to 12,000. + +1993-05-24 Richard Stallman <rms@@gnu.org> + + * vc.el (minor-mode-map-alist): Don't use it if it's void. + (vc-cancel-version): Doc fix. +@end smallexample + + One entry can describe several changes; each change should have its +own item, or its own line in an item. Normally there should be a +blank line between items. When items are related (parts of the same +change, in different places), group them by leaving no blank line +between them. + + You should put a copyright notice and permission notice at the +end of the change log file. Here is an example: + +@smallexample +Copyright 1997, 1998 Free Software Foundation, Inc. +Copying and distribution of this file, with or without modification, are +permitted provided the copyright notice and this notice are preserved. +@end smallexample + +@noindent +Of course, you should substitute the proper years and copyright holder. + +@node Tags +@section Tags Tables +@cindex tags table + + A @dfn{tags table} is a description of how a multi-file program is +broken up into files. It lists the names of the component files and the +names and positions of the functions (or other named subunits) in each +file. Grouping the related files makes it possible to search or replace +through all the files with one command. Recording the function names +and positions makes possible the @kbd{M-.} command which finds the +definition of a function by looking up which of the files it is in. + + Tags tables are stored in files called @dfn{tags table files}. The +conventional name for a tags table file is @file{TAGS}. + + Each entry in the tags table records the name of one tag, the name of the +file that the tag is defined in (implicitly), and the position in that +file of the tag's definition. When a file parsed by @code{etags} is +generated from a different source file, like a C file generated from a +Cweb source file, the tags of the parsed file reference the source +file. + + Just what names from the described files are recorded in the tags table +depends on the programming language of the described file. They +normally include all file names, functions and subroutines, and may +also include global variables, data types, and anything else +convenient. Each name recorded is called a @dfn{tag}. + +@cindex C++ class browser, tags +@cindex tags, C++ +@cindex class browser, C++ +@cindex Ebrowse + See also the Ebrowse facility, which is tailored for C++. +@xref{Top,, Ebrowse, ebrowse, Ebrowse User's Manual}. + +@menu +* Tag Syntax:: Tag syntax for various types of code and text files. +* Create Tags Table:: Creating a tags table with @code{etags}. +* Etags Regexps:: Create arbitrary tags using regular expressions. +* Select Tags Table:: How to visit a tags table. +* Find Tag:: Commands to find the definition of a specific tag. +* Tags Search:: Using a tags table for searching and replacing. +* List Tags:: Listing and finding tags defined in a file. +@end menu + +@node Tag Syntax +@subsection Source File Tag Syntax + + Here is how tag syntax is defined for the most popular languages: + +@itemize @bullet +@item +In C code, any C function or typedef is a tag, and so are definitions of +@code{struct}, @code{union} and @code{enum}. +@code{#define} macro definitions, @code{#undef} and @code{enum} +constants are also +tags, unless you specify @samp{--no-defines} when making the tags table. +Similarly, global variables are tags, unless you specify +@samp{--no-globals}, and so are struct members, unless you specify +@samp{--no-members}. Use of @samp{--no-globals}, @samp{--no-defines} +and @samp{--no-members} can make the tags table file much smaller. + +You can tag function declarations and external variables in addition +to function definitions by giving the @samp{--declarations} option to +@code{etags}. + +@item +In C++ code, in addition to all the tag constructs of C code, member +functions are also recognized; member variables are also recognized, +unless you use the @samp{--no-members} option. Tags for variables and +functions in classes are named @samp{@var{class}::@var{variable}} and +@samp{@var{class}::@var{function}}. @code{operator} definitions have +tag names like @samp{operator+}. + +@item +In Java code, tags include all the constructs recognized in C++, plus +the @code{interface}, @code{extends} and @code{implements} constructs. +Tags for variables and functions in classes are named +@samp{@var{class}.@var{variable}} and @samp{@var{class}.@var{function}}. + +@item +In La@TeX{} text, the argument of any of the commands @code{\chapter}, +@code{\section}, @code{\subsection}, @code{\subsubsection}, +@code{\eqno}, @code{\label}, @code{\ref}, @code{\cite}, +@code{\bibitem}, @code{\part}, @code{\appendix}, @code{\entry}, +@code{\index}, @code{\def}, @code{\newcommand}, @code{\renewcommand}, +@code{\newenvironment} or @code{\renewenvironment} is a tag.@refill + +Other commands can make tags as well, if you specify them in the +environment variable @env{TEXTAGS} before invoking @code{etags}. The +value of this environment variable should be a colon-separated list of +command names. For example, + +@example +TEXTAGS="mycommand:myothercommand" +export TEXTAGS +@end example + +@noindent +specifies (using Bourne shell syntax) that the commands +@samp{\mycommand} and @samp{\myothercommand} also define tags. + +@item +In Lisp code, any function defined with @code{defun}, any variable +defined with @code{defvar} or @code{defconst}, and in general the first +argument of any expression that starts with @samp{(def} in column zero is +a tag. + +@item +In Scheme code, tags include anything defined with @code{def} or with a +construct whose name starts with @samp{def}. They also include variables +set with @code{set!} at top level in the file. +@end itemize + + Several other languages are also supported: + +@itemize @bullet + +@item +In Ada code, functions, procedures, packages, tasks and types are +tags. Use the @samp{--packages-only} option to create tags for +packages only. + +In Ada, the same name can be used for different kinds of entity +(e.g.@:, for a procedure and for a function). Also, for things like +packages, procedures and functions, there is the spec (i.e.@: the +interface) and the body (i.e.@: the implementation). To make it +easier to pick the definition you want, Ada tag name have suffixes +indicating the type of entity: + +@table @samp +@item /b +package body. +@item /f +function. +@item /k +task. +@item /p +procedure. +@item /s +package spec. +@item /t +type. +@end table + + Thus, @kbd{M-x find-tag @key{RET} bidule/b @key{RET}} will go +directly to the body of the package @code{bidule}, while @kbd{M-x +find-tag @key{RET} bidule @key{RET}} will just search for any tag +@code{bidule}. + +@item +In assembler code, labels appearing at the beginning of a line, +followed by a colon, are tags. + +@item +In Bison or Yacc input files, each rule defines as a tag the nonterminal +it constructs. The portions of the file that contain C code are parsed +as C code. + +@item +In Cobol code, tags are paragraph names; that is, any word starting in +column 8 and followed by a period. + +@item +In Erlang code, the tags are the functions, records and macros defined +in the file. + +@item +In Fortran code, functions, subroutines and block data are tags. + +@item +In HTML input files, the tags are the @code{title} and the @code{h1}, +@code{h2}, @code{h3} headers. Also, tags are @code{name=} in anchors +and all occurrences of @code{id=}. + +@item +In Lua input files, all functions are tags. + +@item +In makefiles, targets are tags; additionally, variables are tags +unless you specify @samp{--no-globals}. + +@item +In Objective C code, tags include Objective C definitions for classes, +class categories, methods and protocols. Tags for variables and +functions in classes are named @samp{@var{class}::@var{variable}} and +@samp{@var{class}::@var{function}}. + +@item +In Pascal code, the tags are the functions and procedures defined in +the file. + +@item +In Perl code, the tags are the packages, subroutines and variables +defined by the @code{package}, @code{sub}, @code{my} and @code{local} +keywords. Use @samp{--globals} if you want to tag global variables. +Tags for subroutines are named @samp{@var{package}::@var{sub}}. The +name for subroutines defined in the default package is +@samp{main::@var{sub}}. + +@item +In PHP code, tags are functions, classes and defines. Vars are tags +too, unless you use the @samp{--no-members} option. + +@item +In PostScript code, the tags are the functions. + +@item +In Prolog code, tags are predicates and rules at the beginning of +line. + +@item +In Python code, @code{def} or @code{class} at the beginning of a line +generate a tag. +@end itemize + + You can also generate tags based on regexp matching (@pxref{Etags +Regexps}) to handle other formats and languages. + +@node Create Tags Table +@subsection Creating Tags Tables +@cindex @code{etags} program + + The @code{etags} program is used to create a tags table file. It knows +the syntax of several languages, as described in +@iftex +the previous section. +@end iftex +@ifnottex +@ref{Tag Syntax}. +@end ifnottex +Here is how to run @code{etags}: + +@example +etags @var{inputfiles}@dots{} +@end example + +@noindent +The @code{etags} program reads the specified files, and writes a tags +table named @file{TAGS} in the current working directory. + + If the specified files don't exist, @code{etags} looks for +compressed versions of them and uncompresses them to read them. Under +MS-DOS, @code{etags} also looks for file names like @file{mycode.cgz} +if it is given @samp{mycode.c} on the command line and @file{mycode.c} +does not exist. + + @code{etags} recognizes the language used in an input file based on +its file name and contents. You can specify the language with the +@samp{--language=@var{name}} option, described below. + + If the tags table data become outdated due to changes in the files +described in the table, the way to update the tags table is the same +way it was made in the first place. If the tags table fails to record +a tag, or records it for the wrong file, then Emacs cannot possibly +find its definition until you update the tags table. However, if the +position recorded in the tags table becomes a little bit wrong (due to +other editing), the worst consequence is a slight delay in finding the +tag. Even if the stored position is very far wrong, Emacs will still +find the tag, after searching most of the file for it. That delay is +hardly noticeable with today's computers. + + Thus, there is no need to update the tags table after each edit. +You should update a tags table when you define new tags that you want +to have listed, or when you move tag definitions from one file to +another, or when changes become substantial. + + One tags table can virtually include another. Specify the included +tags file name with the @samp{--include=@var{file}} option when +creating the file that is to include it. The latter file then acts as +if it covered all the source files specified in the included file, as +well as the files it directly contains. + + If you specify the source files with relative file names when you run +@code{etags}, the tags file will contain file names relative to the +directory where the tags file was initially written. This way, you can +move an entire directory tree containing both the tags file and the +source files, and the tags file will still refer correctly to the source +files. If the tags file is in @file{/dev}, however, the file names are +made relative to the current working directory. This is useful, for +example, when writing the tags to @file{/dev/stdout}. + + When using a relative file name, it should not be a symbolic link +pointing to a tags file in a different directory, because this would +generally render the file names invalid. + + If you specify absolute file names as arguments to @code{etags}, then +the tags file will contain absolute file names. This way, the tags file +will still refer to the same files even if you move it, as long as the +source files remain in the same place. Absolute file names start with +@samp{/}, or with @samp{@var{device}:/} on MS-DOS and MS-Windows. + + When you want to make a tags table from a great number of files, you +may have problems listing them on the command line, because some systems +have a limit on its length. The simplest way to circumvent this limit +is to tell @code{etags} to read the file names from its standard input, +by typing a dash in place of the file names, like this: + +@smallexample +find . -name "*.[chCH]" -print | etags - +@end smallexample + + Use the option @samp{--language=@var{name}} to specify the language +explicitly. You can intermix these options with file names; each one +applies to the file names that follow it. Specify +@samp{--language=auto} to tell @code{etags} to resume guessing the +language from the file names and file contents. Specify +@samp{--language=none} to turn off language-specific processing +entirely; then @code{etags} recognizes tags by regexp matching alone +(@pxref{Etags Regexps}). + + The option @samp{--parse-stdin=@var{file}} is mostly useful when +calling @code{etags} from programs. It can be used (only once) in +place of a file name on the command line. @code{Etags} will read from +standard input and mark the produced tags as belonging to the file +@var{file}. + + @samp{etags --help} outputs the list of the languages @code{etags} +knows, and the file name rules for guessing the language. It also prints +a list of all the available @code{etags} options, together with a short +explanation. If followed by one or more @samp{--language=@var{lang}} +options, it outputs detailed information about how tags are generated for +@var{lang}. + +@node Etags Regexps +@subsection Etags Regexps + + The @samp{--regex} option provides a general way of recognizing tags +based on regexp matching. You can freely intermix this option with +file names, and each one applies to the source files that follow it. +If you specify multiple @samp{--regex} options, all of them are used +in parallel. The syntax is: + +@smallexample +--regex=[@var{@{language@}}]/@var{tagregexp}/[@var{nameregexp}/]@var{modifiers} +@end smallexample + + The essential part of the option value is @var{tagregexp}, the +regexp for matching tags. It is always used anchored, that is, it +only matches at the beginning of a line. If you want to allow +indented tags, use a regexp that matches initial whitespace; start it +with @samp{[ \t]*}. + + In these regular expressions, @samp{\} quotes the next character, and +all the GCC character escape sequences are supported (@samp{\a} for +bell, @samp{\b} for back space, @samp{\d} for delete, @samp{\e} for +escape, @samp{\f} for formfeed, @samp{\n} for newline, @samp{\r} for +carriage return, @samp{\t} for tab, and @samp{\v} for vertical tab). + + Ideally, @var{tagregexp} should not match more characters than are +needed to recognize what you want to tag. If the syntax requires you +to write @var{tagregexp} so it matches more characters beyond the tag +itself, you should add a @var{nameregexp}, to pick out just the tag. +This will enable Emacs to find tags more accurately and to do +completion on tag names more reliably. You can find some examples +below. + + The @var{modifiers} are a sequence of zero or more characters that +modify the way @code{etags} does the matching. A regexp with no +modifiers is applied sequentially to each line of the input file, in a +case-sensitive way. The modifiers and their meanings are: + +@table @samp +@item i +Ignore case when matching this regexp. +@item m +Match this regular expression against the whole file, so that +multi-line matches are possible. +@item s +Match this regular expression against the whole file, and allow +@samp{.} in @var{tagregexp} to match newlines. +@end table + + The @samp{-R} option cancels all the regexps defined by preceding +@samp{--regex} options. It too applies to the file names following +it. Here's an example: + +@smallexample +etags --regex=/@var{reg1}/i voo.doo --regex=/@var{reg2}/m \ + bar.ber -R --lang=lisp los.er +@end smallexample + +@noindent +Here @code{etags} chooses the parsing language for @file{voo.doo} and +@file{bar.ber} according to their contents. @code{etags} also uses +@var{reg1} to recognize additional tags in @file{voo.doo}, and both +@var{reg1} and @var{reg2} to recognize additional tags in +@file{bar.ber}. @var{reg1} is checked against each line of +@file{voo.doo} and @file{bar.ber}, in a case-insensitive way, while +@var{reg2} is checked against the whole @file{bar.ber} file, +permitting multi-line matches, in a case-sensitive way. @code{etags} +uses only the Lisp tags rules, with no user-specified regexp matching, +to recognize tags in @file{los.er}. + + You can restrict a @samp{--regex} option to match only files of a +given language by using the optional prefix @var{@{language@}}. +(@samp{etags --help} prints the list of languages recognized by +@code{etags}.) This is particularly useful when storing many +predefined regular expressions for @code{etags} in a file. The +following example tags the @code{DEFVAR} macros in the Emacs source +files, for the C language only: + +@smallexample +--regex='@{c@}/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/' +@end smallexample + +@noindent +When you have complex regular expressions, you can store the list of +them in a file. The following option syntax instructs @code{etags} to +read two files of regular expressions. The regular expressions +contained in the second file are matched without regard to case. + +@smallexample +--regex=@@@var{case-sensitive-file} --ignore-case-regex=@@@var{ignore-case-file} +@end smallexample + +@noindent +A regex file for @code{etags} contains one regular expression per +line. Empty lines, and lines beginning with space or tab are ignored. +When the first character in a line is @samp{@@}, @code{etags} assumes +that the rest of the line is the name of another file of regular +expressions; thus, one such file can include another file. All the +other lines are taken to be regular expressions. If the first +non-whitespace text on the line is @samp{--}, that line is a comment. + + For example, we can create a file called @samp{emacs.tags} with the +following contents: + +@smallexample + -- This is for GNU Emacs C source files +@{c@}/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/\1/ +@end smallexample + +@noindent +and then use it like this: + +@smallexample +etags --regex=@@emacs.tags *.[ch] */*.[ch] +@end smallexample + + Here are some more examples. The regexps are quoted to protect them +from shell interpretation. + +@itemize @bullet + +@item +Tag Octave files: + +@smallexample +etags --language=none \ + --regex='/[ \t]*function.*=[ \t]*\([^ \t]*\)[ \t]*(/\1/' \ + --regex='/###key \(.*\)/\1/' \ + --regex='/[ \t]*global[ \t].*/' \ + *.m +@end smallexample + +@noindent +Note that tags are not generated for scripts, so that you have to add +a line by yourself of the form @samp{###key @var{scriptname}} if you +want to jump to it. + +@item +Tag Tcl files: + +@smallexample +etags --language=none --regex='/proc[ \t]+\([^ \t]+\)/\1/' *.tcl +@end smallexample + +@item +Tag VHDL files: + +@smallexample +etags --language=none \ + --regex='/[ \t]*\(ARCHITECTURE\|CONFIGURATION\) +[^ ]* +OF/' \ + --regex='/[ \t]*\(ATTRIBUTE\|ENTITY\|FUNCTION\|PACKAGE\ + \( BODY\)?\|PROCEDURE\|PROCESS\|TYPE\)[ \t]+\([^ \t(]+\)/\3/' +@end smallexample +@end itemize + +@node Select Tags Table +@subsection Selecting a Tags Table + +@vindex tags-file-name +@findex visit-tags-table + Emacs has at any time one @dfn{selected} tags table, and all the +commands for working with tags tables use the selected one. To select +a tags table, type @kbd{M-x visit-tags-table}, which reads the tags +table file name as an argument, with @file{TAGS} in the default +directory as the default. + + Emacs does not actually read in the tags table contents until you +try to use them; all @code{visit-tags-table} does is store the file +name in the variable @code{tags-file-name}, and setting the variable +yourself is just as good. The variable's initial value is @code{nil}; +that value tells all the commands for working with tags tables that +they must ask for a tags table file name to use. + + Using @code{visit-tags-table} when a tags table is already loaded +gives you a choice: you can add the new tags table to the current list +of tags tables, or start a new list. The tags commands use all the tags +tables in the current list. If you start a new list, the new tags table +is used @emph{instead} of others. If you add the new table to the +current list, it is used @emph{as well as} the others. + +@vindex tags-table-list + You can specify a precise list of tags tables by setting the variable +@code{tags-table-list} to a list of strings, like this: + +@c keep this on two lines for formatting in smallbook +@example +@group +(setq tags-table-list + '("~/emacs" "/usr/local/lib/emacs/src")) +@end group +@end example + +@noindent +This tells the tags commands to look at the @file{TAGS} files in your +@file{~/emacs} directory and in the @file{/usr/local/lib/emacs/src} +directory. The order depends on which file you are in and which tags +table mentions that file, as explained above. + + Do not set both @code{tags-file-name} and @code{tags-table-list}. + +@node Find Tag +@subsection Finding a Tag + + The most important thing that a tags table enables you to do is to find +the definition of a specific tag. + +@table @kbd +@item M-.@: @var{tag} @key{RET} +Find first definition of @var{tag} (@code{find-tag}). +@item C-u M-. +Find next alternate definition of last tag specified. +@item C-u - M-. +Go back to previous tag found. +@item C-M-. @var{pattern} @key{RET} +Find a tag whose name matches @var{pattern} (@code{find-tag-regexp}). +@item C-u C-M-. +Find the next tag whose name matches the last pattern used. +@item C-x 4 .@: @var{tag} @key{RET} +Find first definition of @var{tag}, but display it in another window +(@code{find-tag-other-window}). +@item C-x 5 .@: @var{tag} @key{RET} +Find first definition of @var{tag}, and create a new frame to select the +buffer (@code{find-tag-other-frame}). +@item M-* +Pop back to where you previously invoked @kbd{M-.} and friends. +@end table + +@kindex M-. +@findex find-tag + @kbd{M-.}@: (@code{find-tag}) is the command to find the definition of +a specified tag. It searches through the tags table for that tag, as a +string, and then uses the tags table info to determine the file that the +definition is in and the approximate character position in the file of +the definition. Then @code{find-tag} visits that file, moves point to +the approximate character position, and searches ever-increasing +distances away to find the tag definition. + + If an empty argument is given (just type @key{RET}), the balanced +expression in the buffer before or around point is used as the +@var{tag} argument. @xref{Expressions}. + + You don't need to give @kbd{M-.} the full name of the tag; a part +will do. This is because @kbd{M-.} finds tags in the table which +contain @var{tag} as a substring. However, it prefers an exact match +to a substring match. To find other tags that match the same +substring, give @code{find-tag} a numeric argument, as in @kbd{C-u +M-.}; this does not read a tag name, but continues searching the tags +table's text for another tag containing the same substring last used. +If you have a real @key{META} key, @kbd{M-0 M-.}@: is an easier +alternative to @kbd{C-u M-.}. + +@kindex C-x 4 . +@findex find-tag-other-window +@kindex C-x 5 . +@findex find-tag-other-frame + Like most commands that can switch buffers, @code{find-tag} has a +variant that displays the new buffer in another window, and one that +makes a new frame for it. The former is @w{@kbd{C-x 4 .}}, which invokes +the command @code{find-tag-other-window}. The latter is @w{@kbd{C-x 5 .}}, +which invokes @code{find-tag-other-frame}. + + To move back to places you've found tags recently, use @kbd{C-u - +M-.}; more generally, @kbd{M-.} with a negative numeric argument. This +command can take you to another buffer. @w{@kbd{C-x 4 .}} with a negative +argument finds the previous tag location in another window. + +@kindex M-* +@findex pop-tag-mark +@vindex find-tag-marker-ring-length + As well as going back to places you've found tags recently, you can go +back to places @emph{from where} you found them. Use @kbd{M-*}, which +invokes the command @code{pop-tag-mark}, for this. Typically you would +find and study the definition of something with @kbd{M-.} and then +return to where you were with @kbd{M-*}. + + Both @kbd{C-u - M-.} and @kbd{M-*} allow you to retrace your steps to +a depth determined by the variable @code{find-tag-marker-ring-length}. + +@findex find-tag-regexp +@kindex C-M-. + The command @kbd{C-M-.} (@code{find-tag-regexp}) visits the tags that +match a specified regular expression. It is just like @kbd{M-.} except +that it does regexp matching instead of substring matching. + +@node Tags Search +@subsection Searching and Replacing with Tags Tables +@cindex search and replace in multiple files +@cindex multiple-file search and replace + + The commands in this section visit and search all the files listed +in the selected tags table, one by one. For these commands, the tags +table serves only to specify a sequence of files to search. These +commands scan the list of tags tables starting with the first tags +table (if any) that describes the current file, proceed from there to +the end of the list, and then scan from the beginning of the list +until they have covered all the tables in the list. + +@table @kbd +@item M-x tags-search @key{RET} @var{regexp} @key{RET} +Search for @var{regexp} through the files in the selected tags +table. +@item M-x tags-query-replace @key{RET} @var{regexp} @key{RET} @var{replacement} @key{RET} +Perform a @code{query-replace-regexp} on each file in the selected tags table. +@item M-, +Restart one of the commands above, from the current location of point +(@code{tags-loop-continue}). +@end table + +@findex tags-search + @kbd{M-x tags-search} reads a regexp using the minibuffer, then +searches for matches in all the files in the selected tags table, one +file at a time. It displays the name of the file being searched so you +can follow its progress. As soon as it finds an occurrence, +@code{tags-search} returns. + +@kindex M-, +@findex tags-loop-continue + Having found one match, you probably want to find all the rest. To find +one more match, type @kbd{M-,} (@code{tags-loop-continue}) to resume the +@code{tags-search}. This searches the rest of the current buffer, followed +by the remaining files of the tags table.@refill + +@findex tags-query-replace + @kbd{M-x tags-query-replace} performs a single +@code{query-replace-regexp} through all the files in the tags table. It +reads a regexp to search for and a string to replace with, just like +ordinary @kbd{M-x query-replace-regexp}. It searches much like @kbd{M-x +tags-search}, but repeatedly, processing matches according to your +input. @xref{Replace}, for more information on query replace. + +@vindex tags-case-fold-search +@cindex case-sensitivity and tags search + You can control the case-sensitivity of tags search commands by +customizing the value of the variable @code{tags-case-fold-search}. The +default is to use the same setting as the value of +@code{case-fold-search} (@pxref{Search Case}). + + It is possible to get through all the files in the tags table with a +single invocation of @kbd{M-x tags-query-replace}. But often it is +useful to exit temporarily, which you can do with any input event that +has no special query replace meaning. You can resume the query replace +subsequently by typing @kbd{M-,}; this command resumes the last tags +search or replace command that you did. + + The commands in this section carry out much broader searches than the +@code{find-tag} family. The @code{find-tag} commands search only for +definitions of tags that match your substring or regexp. The commands +@code{tags-search} and @code{tags-query-replace} find every occurrence +of the regexp, as ordinary search commands and replace commands do in +the current buffer. + + These commands create buffers only temporarily for the files that they +have to search (those which are not already visited in Emacs buffers). +Buffers in which no match is found are quickly killed; the others +continue to exist. + + It may have struck you that @code{tags-search} is a lot like +@code{grep}. You can also run @code{grep} itself as an inferior of +Emacs and have Emacs show you the matching lines one by one. +@xref{Grep Searching}. + +@node List Tags +@subsection Tags Table Inquiries + +@table @kbd +@item M-x list-tags @key{RET} @var{file} @key{RET} +Display a list of the tags defined in the program file @var{file}. +@item M-x tags-apropos @key{RET} @var{regexp} @key{RET} +Display a list of all tags matching @var{regexp}. +@end table + +@findex list-tags + @kbd{M-x list-tags} reads the name of one of the files described by +the selected tags table, and displays a list of all the tags defined in +that file. The ``file name'' argument is really just a string to +compare against the file names recorded in the tags table; it is read as +a string rather than as a file name. Therefore, completion and +defaulting are not available, and you must enter the file name the same +way it appears in the tags table. Do not include a directory as part of +the file name unless the file name recorded in the tags table includes a +directory. + +@findex tags-apropos +@vindex tags-apropos-verbose + @kbd{M-x tags-apropos} is like @code{apropos} for tags +(@pxref{Apropos}). It finds all the tags in the selected tags table +whose entries match @var{regexp}, and displays them. If the variable +@code{tags-apropos-verbose} is non-@code{nil}, it displays the names +of the tags files together with the tag names. + +@vindex tags-tag-face +@vindex tags-apropos-additional-actions + You can customize the appearance of the output by setting the +variable @code{tags-tag-face} to a face. You can display additional +output with @kbd{M-x tags-apropos} by customizing the variable +@code{tags-apropos-additional-actions}---see its documentation for +details. + + You can also use the collection of tag names to complete a symbol +name in the buffer. @xref{Symbol Completion}. + +@ifnottex +@include emerge-xtra.texi +@end ifnottex + +@ignore + arch-tag: b9d83dfb-82ea-4ff6-bab5-05a3617091fb +@end ignore diff --git a/doc/emacs/major.texi b/doc/emacs/major.texi new file mode 100644 index 00000000000..1cb76ee5fdf --- /dev/null +++ b/doc/emacs/major.texi @@ -0,0 +1,206 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Major Modes, Indentation, International, Top +@chapter Major Modes +@cindex major modes +@cindex mode, major +@kindex TAB @r{(and major modes)} +@kindex DEL @r{(and major modes)} +@kindex C-j @r{(and major modes)} + + Emacs provides many alternative @dfn{major modes}, each of which +customizes Emacs for editing text of a particular sort. The major modes +are mutually exclusive, and each buffer has one major mode at any time. +The mode line normally shows the name of the current major mode, in +parentheses (@pxref{Mode Line}). + + The least specialized major mode is called @dfn{Fundamental mode}. +This mode has no mode-specific redefinitions or variable settings, so +that each Emacs command behaves in its most general manner, and each +user option variable is in its default state. For editing text of a +specific type that Emacs knows about, such as Lisp code or English +text, you should switch to the appropriate major mode, such as Lisp +mode or Text mode. + + Selecting a major mode changes the meanings of a few keys to become +more specifically adapted to the language being edited. The ones that +are changed frequently are @key{TAB}, @key{DEL}, and @kbd{C-j}. The +prefix key @kbd{C-c} normally contains mode-specific commands. In +addition, the commands which handle comments use the mode to determine +how comments are to be delimited. Many major modes redefine the +syntactical properties of characters appearing in the buffer. +@xref{Syntax}. + + The major modes fall into three major groups. The first group +contains modes for normal text, either plain or with mark-up. It +includes Text mode, HTML mode, SGML mode, @TeX{} mode and Outline +mode. The second group contains modes for specific programming +languages. These include Lisp mode (which has several variants), C +mode, Fortran mode, and others. The remaining major modes are not +intended for use on users' files; they are used in buffers created for +specific purposes by Emacs, such as Dired mode for buffers made by +Dired (@pxref{Dired}), Mail mode for buffers made by @kbd{C-x m} +(@pxref{Sending Mail}), and Shell mode for buffers used for +communicating with an inferior shell process (@pxref{Interactive +Shell}). + + Most programming-language major modes specify that only blank lines +separate paragraphs. This is to make the paragraph commands useful. +(@xref{Paragraphs}.) They also cause Auto Fill mode to use the +definition of @key{TAB} to indent the new lines it creates. This is +because most lines in a program are usually indented +(@pxref{Indentation}). + +@menu +* Choosing Modes:: How major modes are specified or chosen. +@end menu + +@node Choosing Modes,,Major Modes,Major Modes +@section How Major Modes are Chosen + +@cindex choosing a major mode + You can select a major mode explicitly for the current buffer, but +most of the time Emacs determines which mode to use based on the file +name or on special text in the file. + + To explicitly select a new major, you use an @kbd{M-x} command. +Take the name of a major mode and add @code{-mode} to get the name of +the command to select that mode. Thus, you can enter Lisp mode by +executing @kbd{M-x lisp-mode}. + +@vindex auto-mode-alist + When you visit a file, Emacs usually chooses the right major mode based +on the file's name. For example, files whose names end in @samp{.c} are +edited in C mode. The correspondence between file names and major modes is +controlled by the variable @code{auto-mode-alist}. Its value is a list in +which each element has this form, + +@example +(@var{regexp} . @var{mode-function}) +@end example + +@noindent +or this form, + +@example +(@var{regexp} @var{mode-function} @var{flag}) +@end example + +@noindent +For example, one element normally found in the list has the form +@code{(@t{"\\.c\\'"} . c-mode)}, and it is responsible for selecting C +mode for files whose names end in @file{.c}. (Note that @samp{\\} is +needed in Lisp syntax to include a @samp{\} in the string, which must +be used to suppress the special meaning of @samp{.} in regexps.) If +the element has the form @code{(@var{regexp} @var{mode-function} +@var{flag})} and @var{flag} is non-@code{nil}, then after calling +@var{mode-function}, Emacs discards the suffix that matched +@var{regexp} and searches the list again for another match. + +@vindex magic-mode-alist + Sometimes the major mode is determined from the way the file's text +begins. The variable @code{magic-mode-alist} controls this. Its value +is a list of elements of these forms: + +@example +(@var{regexp} . @var{mode-function}) +(@var{match-function} . @var{mode-function}) +@end example + +@noindent +The first form looks like an element of @code{auto-mode-alist}, but it +doesn't work the same: this @var{regexp} is matched against the text +at the start of the buffer, not against the file name. Likewise, the +second form calls @var{match-function} at the beginning of the buffer, +and if the function returns non-@code{nil}, the @var{mode-function} is +called. @code{magic-mode-alist} takes priority over +@code{auto-mode-alist}. + + You can specify the major mode to use for editing a certain file by +special text in the first nonblank line of the file. The +mode name should appear in this line both preceded and followed by +@samp{-*-}. Other text may appear on the line as well. For example, + +@example +;-*-Lisp-*- +@end example + +@noindent +tells Emacs to use Lisp mode. Such an explicit specification overrides +any defaults based on the file name. Note how the semicolon is used +to make Lisp treat this line as a comment. + + Another format of mode specification is + +@example +-*- mode: @var{modename};-*- +@end example + +@noindent +which allows you to specify local variables as well, like this: + +@example +-*- mode: @var{modename}; @var{var}: @var{value}; @dots{} -*- +@end example + +@noindent +@xref{File Variables}, for more information about this. + +@vindex auto-mode-case-fold + On systems with case-insensitive file names, only a single +case-insensitive search through the @code{auto-mode-alist} is made. +On other systems, Emacs normally performs a single case-sensitive +search through the alist, but if you set this variable to a +non-@code{nil} value, Emacs will perform a second case-insensitive +search if the first search fails. + +@vindex interpreter-mode-alist + When a file's contents begin with @samp{#!}, it can serve as an +executable shell command, which works by running an interpreter named on +the file's first line. The rest of the file is used as input to the +interpreter. + + When you visit such a file in Emacs, if the file's name does not +specify a major mode, Emacs uses the interpreter name on the first line +to choose a mode. If the first line is the name of a recognized +interpreter program, such as @samp{perl} or @samp{tcl}, Emacs uses a +mode appropriate for programs for that interpreter. The variable +@code{interpreter-mode-alist} specifies the correspondence between +interpreter program names and major modes. + + When the first line starts with @samp{#!}, you cannot (on many +systems) use the @samp{-*-} feature on the first line, because the +system would get confused when running the interpreter. So Emacs looks +for @samp{-*-} on the second line in such files as well as on the +first line. + +@vindex default-major-mode + When you visit a file that does not specify a major mode to use, or +when you create a new buffer with @kbd{C-x b}, the variable +@code{default-major-mode} specifies which major mode to use. Normally +its value is the symbol @code{fundamental-mode}, which specifies +Fundamental mode. If @code{default-major-mode} is @code{nil}, the major +mode is taken from the previously current buffer. + +@findex normal-mode + If you change the major mode of a buffer, you can go back to the major +mode Emacs would choose automatically: use the command @kbd{M-x +normal-mode} to do this. This is the same function that +@code{find-file} calls to choose the major mode. It also processes +the file's @samp{-*-} line or local variables list (if any). +@xref{File Variables}. + +@vindex change-major-mode-with-file-name + The commands @kbd{C-x C-w} and @code{set-visited-file-name} change to +a new major mode if the new file name implies a mode (@pxref{Saving}). +(@kbd{C-x C-s} does this too, if the buffer wasn't visiting a file.) +However, this does not happen if the buffer contents specify a major +mode, and certain ``special'' major modes do not allow the mode to +change. You can turn off this mode-changing feature by setting +@code{change-major-mode-with-file-name} to @code{nil}. + +@ignore + arch-tag: f2558800-cf32-4839-8acb-7d3b4df2a155 +@end ignore diff --git a/doc/emacs/makefile.w32-in b/doc/emacs/makefile.w32-in new file mode 100644 index 00000000000..e7185cd9c03 --- /dev/null +++ b/doc/emacs/makefile.w32-in @@ -0,0 +1,144 @@ +#### -*- Makefile -*- for the Emacs Manual and other documentation. + +# Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + +# This file is part of GNU Emacs. + +# GNU Emacs is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. + +# GNU Emacs is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with GNU Emacs; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. + +# Where to find the source code. The source code for Emacs's C kernel is +# expected to be in $(srcdir)/src, and the source code for Emacs's +# utility programs is expected to be in $(srcdir)/lib-src. This is +# set by the configure script's `--srcdir' option. +srcdir=. + +infodir = $(srcdir)/../info + +# The makeinfo program is part of the Texinfo distribution. +MAKEINFO = makeinfo --force +MULTI_INSTALL_INFO = $(srcdir)\..\..\nt\multi-install-info.bat +INFO_TARGETS = $(infodir)/emacs +DVI_TARGETS = emacs.dvi +INFOSOURCES = info.texi + +# The following rule does not work with all versions of `make'. +.SUFFIXES: .texi .dvi +.texi.dvi: + texi2dvi $< + +TEXI2DVI = texi2dvi +ENVADD = $(srcdir)\..\..\nt\envadd.bat "TEXINPUTS=$(srcdir);$(TEXINPUTS)" \ + "MAKEINFO=$(MAKEINFO) -I$(srcdir)" /C + +EMACS_XTRA=\ + $(srcdir)/arevert-xtra.texi \ + $(srcdir)/cal-xtra.texi \ + $(srcdir)/dired-xtra.texi \ + $(srcdir)/picture-xtra.texi \ + $(srcdir)/emerge-xtra.texi \ + $(srcdir)/vc-xtra.texi \ + $(srcdir)/vc1-xtra.texi \ + $(srcdir)/vc2-xtra.texi \ + $(srcdir)/fortran-xtra.texi \ + $(srcdir)/msdog-xtra.texi + +EMACSSOURCES= \ + $(srcdir)/emacs.texi \ + $(srcdir)/doclicense.texi \ + $(srcdir)/screen.texi \ + $(srcdir)/commands.texi \ + $(srcdir)/entering.texi \ + $(srcdir)/basic.texi \ + $(srcdir)/mini.texi \ + $(srcdir)/m-x.texi \ + $(srcdir)/help.texi \ + $(srcdir)/mark.texi \ + $(srcdir)/killing.texi \ + $(srcdir)/regs.texi \ + $(srcdir)/display.texi \ + $(srcdir)/search.texi \ + $(srcdir)/fixit.texi \ + $(srcdir)/files.texi \ + $(srcdir)/buffers.texi \ + $(srcdir)/windows.texi \ + $(srcdir)/frames.texi \ + $(srcdir)/mule.texi \ + $(srcdir)/major.texi \ + $(srcdir)/indent.texi \ + $(srcdir)/text.texi \ + $(srcdir)/programs.texi \ + $(srcdir)/building.texi \ + $(srcdir)/maintaining.texi \ + $(srcdir)/abbrevs.texi \ + $(srcdir)/sending.texi \ + $(srcdir)/rmail.texi \ + $(srcdir)/dired.texi \ + $(srcdir)/calendar.texi \ + $(srcdir)/misc.texi \ + $(srcdir)/custom.texi \ + $(srcdir)/trouble.texi \ + $(srcdir)/cmdargs.texi \ + $(srcdir)/xresources.texi \ + $(srcdir)/anti.texi \ + $(srcdir)/macos.texi \ + $(srcdir)/msdog.texi \ + $(srcdir)/gnu.texi \ + $(srcdir)/glossary.texi \ + $(srcdir)/ack.texi \ + $(srcdir)/kmacro.texi \ + $(EMACS_XTRA) + +info: $(INFO_TARGETS) + +dvi: $(DVI_TARGETS) + +# Note that all the Info targets build the Info files +# in srcdir. There is no provision for Info files +# to exist in the build directory. +# In a distribution of Emacs, the Info files should be up to date. + +$(infodir)/dir: + $(MULTI_INSTALL_INFO) --info-dir=$(infodir) $(INFO_TARGETS) + +$(infodir)/emacs: $(EMACSSOURCES) + $(MAKEINFO) emacs.texi + +emacs.dvi: $(EMACSSOURCES) + $(ENVADD) $(TEXI2DVI) $(srcdir)/emacs.texi + +emacs-xtra.dvi: emacs-xtra.texi $(EMACS_XTRA) + $(ENVADD) $(TEXI2DVI) $(srcdir)/emacs-xtra.texi + +mostlyclean: + - $(DEL) *.log *.cp *.fn *.ky *.pg *.vr core *.tp *.core gnustmp.* + +clean: mostlyclean + - $(DEL) *.dvi + - $(DEL) $(infodir)/emacs* + +distclean: clean + +maintainer-clean: distclean + - $(DEL) *.aux *.cps *.fns *.kys *.pgs *.vrs *.toc +# Don't delete these, because they are outside the current directory. +# for file in $(INFO_TARGETS); do rm -f $${file}*; done + + +# Formerly this directory had texindex.c and getopt.c in it +# and this makefile built them to make texindex. +# That caused trouble because this is run entirely in the source directory. +# Since we expect to get texi2dvi from elsewhere, +# it is ok to expect texindex from elsewhere also. diff --git a/doc/emacs/mark.texi b/doc/emacs/mark.texi new file mode 100644 index 00000000000..be446ab6bfc --- /dev/null +++ b/doc/emacs/mark.texi @@ -0,0 +1,452 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2001, 2002, +@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Mark, Killing, Help, Top +@chapter The Mark and the Region +@cindex mark +@cindex setting a mark +@cindex region + + Many Emacs commands operate on an arbitrary contiguous part of the +current buffer. To specify the text for such a command to operate on, +you set @dfn{the mark} at one end of it, and move point to the other +end. The text between point and the mark is called @dfn{the region}. +Emacs highlights the region whenever there is one, if you enable +Transient Mark mode (@pxref{Transient Mark}). + + Certain Emacs commands set the mark; other editing commands do not +affect it, so the mark remains where you set it last. Each Emacs +buffer has its own mark, and setting the mark in one buffer has no +effect on other buffers' marks. When you return to a buffer that was +current earlier, its mark is at the same place as before. + + The ends of the region are always point and the mark. It doesn't +matter which of them was put in its current place first, or which one +comes earlier in the text---the region starts from point or the mark +(whichever comes first), and ends at point or the mark (whichever +comes last). Every time you move point, or set the mark in a new +place, the region changes. + + Many commands that insert text, such as @kbd{C-y} (@code{yank}) and +@kbd{M-x insert-buffer}, position point and the mark at opposite ends +of the inserted text, so that the region consists of the text just +inserted. + + Aside from delimiting the region, the mark is also useful for +remembering a spot that you may want to go back to. To make this +feature more useful, each buffer remembers 16 previous locations of the +mark in the @dfn{mark ring}. + +@menu +* Setting Mark:: Commands to set the mark. +* Transient Mark:: How to make Emacs highlight the region-- + when there is one. +* Momentary Mark:: Enabling Transient Mark mode momentarily. +* Using Region:: Summary of ways to operate on contents of the region. +* Marking Objects:: Commands to put region around textual units. +* Mark Ring:: Previous mark positions saved so you can go back there. +* Global Mark Ring:: Previous mark positions in various buffers. +@end menu + +@node Setting Mark +@section Setting the Mark + + Here are some commands for setting the mark: + +@table @kbd +@item C-@key{SPC} +Set the mark where point is (@code{set-mark-command}). +@item C-@@ +The same. +@item C-x C-x +Interchange mark and point (@code{exchange-point-and-mark}). +@item Drag-Mouse-1 +Set point and the mark around the text you drag across. +@item Mouse-3 +Set the mark where point is, then move point to where you click +(@code{mouse-save-then-kill}). +@end table + + For example, suppose you wish to convert part of the buffer to +upper case, using the @kbd{C-x C-u} (@code{upcase-region}) command, +which operates on the text in the region. You can first go to the +beginning of the text to be capitalized, type @kbd{C-@key{SPC}} to put +the mark there, move to the end, and then type @kbd{C-x C-u}. Or, you +can set the mark at the end of the text, move to the beginning, and then +type @kbd{C-x C-u}. + +@kindex C-SPC +@findex set-mark-command + The most common way to set the mark is with the @kbd{C-@key{SPC}} command +(@code{set-mark-command}). This sets the mark where point is. Then you +can move point away, leaving the mark behind. + + There are two ways to set the mark with the mouse. You can drag mouse +button one across a range of text; that puts point where you release the +mouse button, and sets the mark at the other end of that range. Or you +can click mouse button three, which sets the mark at point (like +@kbd{C-@key{SPC}}) and then moves point where you clicked (like +@kbd{Mouse-1}). + + Using the mouse to mark a region copies the region into the kill +ring in addition to setting the mark; that gives behavior consistent +with other window-driven applications. If you don't want to modify +the kill ring, you must use keyboard commands to set the mark. +@xref{Mouse Commands}. + +@kindex C-x C-x +@findex exchange-point-and-mark + When Emacs was developed, terminals had only one cursor, so Emacs +does not show where the mark is located--you have to remember. If you +enable Transient Mark mode (see below), then the region is highlighted +when it is active; you can tell mark is at the other end of the +highlighted region. But this only applies when the mark is active. + + The usual solution to this problem is to set the mark and then use +it soon, before you forget where it is. Alternatively, you can see +where the mark is with the command @kbd{C-x C-x} +(@code{exchange-point-and-mark}) which puts the mark where point was +and point where the mark was. The extent of the region is unchanged, +but the cursor and point are now at the previous position of the mark. +In Transient Mark mode, this command also reactivates the mark. + + @kbd{C-x C-x} is also useful when you are satisfied with the position +of point but want to move the other end of the region (where the mark +is); do @kbd{C-x C-x} to put point at that end of the region, and then +move it. Using @kbd{C-x C-x} a second time, if necessary, puts the mark at +the new position with point back at its original position. + + For more facilities that allow you to go to previously set marks, see +@ref{Mark Ring}. + +@kindex C-@@ + There is no such character as @kbd{C-@key{SPC}} in @acronym{ASCII}; +when you type @key{SPC} while holding down @key{CTRL} on a text +terminal, what you get is the character @kbd{C-@@}. This key is also +bound to @code{set-mark-command}--so unless you are unlucky enough to +have a text terminal where typing @kbd{C-@key{SPC}} does not produce +@kbd{C-@@}, you might as well think of this character as +@kbd{C-@key{SPC}}. + +@node Transient Mark +@section Transient Mark Mode +@cindex mode, Transient Mark +@cindex Transient Mark mode +@cindex highlighting region +@cindex region highlighting + + On a terminal that supports colors, Emacs has the ability to +highlight the current region. But normally it does not. Why not? + + In the normal mode of use, every command that sets the mark also +activates it, and nothing ever deactivates it. Thus, once you have +set the mark in a buffer, there is @emph{always} a region in that +buffer. Highlighting the region all the time would be a nuisance. So +normally Emacs highlights the region only immediately after you have +selected one with the mouse. + + If you want region highlighting, you can use Transient Mark mode. +This is a more rigid mode of operation in which the region ``lasts'' +only until you use it; operating on the region text deactivates the +mark, so there is no region any more. Therefore, you must explicitly +set up a region for each command that uses one. + + When Transient Mark mode is enabled, Emacs highlights the region, +whenever there is a region. In Transient Mark mode, most of the time +there is no region; therefore, highlighting the region when it exists +is useful and not annoying. + +@findex transient-mark-mode + To enable Transient Mark mode, type @kbd{M-x transient-mark-mode}. +This command toggles the mode; you can use the same command to turn +the mode off again. + + Here are the details of Transient Mark mode: + +@itemize @bullet +@item +To set the mark, type @kbd{C-@key{SPC}} (@code{set-mark-command}). +This makes the mark active and thus begins highlighting of the region. +As you move point, you will see the highlighted region grow and +shrink. + +@item +The mouse commands for specifying the mark also make it active. So do +keyboard commands whose purpose is to specify a region, including +@kbd{M-@@}, @kbd{C-M-@@}, @kbd{M-h}, @kbd{C-M-h}, @kbd{C-x C-p}, and +@kbd{C-x h}. + +@item +You can tell that the mark is active because the region is highlighted. + +@item +When the mark is active, you can execute commands that operate on the +region, such as killing, indenting, or writing to a file. + +@item +Any change to the buffer, such as inserting or deleting a character, +deactivates the mark. This means any subsequent command that operates +on a region will get an error and refuse to operate. You can make the +region active again by typing @kbd{C-x C-x}. + +@item +If Delete Selection mode is also enabled, some commands delete the +region when used while the mark is active. @xref{Mouse Commands}. + +@item +Quitting with @kbd{C-g} deactivates the mark. + +@item +Commands like @kbd{M->} and @kbd{C-s}, that ``leave the mark behind'' in +addition to some other primary purpose, do not activate the new mark. +You can activate the new region by executing @kbd{C-x C-x} +(@code{exchange-point-and-mark}). + +@item +Commands that normally set the mark before moving long distances (like +@kbd{M-<} and @kbd{C-s}) do not alter the mark in Transient Mark mode +when the mark is active. + +@item +Some commands operate on the region if a region is active. For +instance, @kbd{C-x u} in Transient Mark mode operates on the region, +when there is a region. (Outside Transient Mark mode, you must type +@kbd{C-u C-x u} if you want it to operate on the region.) +@xref{Undo}. Other commands that act this way are identified in their +own documentation. +@end itemize + + The highlighting of the region uses the @code{region} face; you can +customize the appearance of the highlighted region by changing this +face. @xref{Face Customization}. + +@vindex highlight-nonselected-windows + When multiple windows show the same buffer, they can have different +regions, because they can have different values of point (though they +all share one common mark position). Ordinarily, only the selected +window highlights its region (@pxref{Windows}). However, if the +variable @code{highlight-nonselected-windows} is non-@code{nil}, then +each window highlights its own region (provided that Transient Mark mode +is enabled and the mark in the window's buffer is active). + +@vindex mark-even-if-inactive + If the variable @code{mark-even-if-inactive} is non-@code{nil} in +Transient Mark mode, then commands can use the mark and the region +even when it is inactive. Region highlighting appears and disappears +just as it normally does in Transient Mark mode, but the mark doesn't +really go away when the highlighting disappears, so you can still use +region commands. + +@cindex Zmacs mode + Transient Mark mode is also sometimes known as ``Zmacs mode'' +because the Zmacs editor on the MIT Lisp Machine handled the mark in a +similar way. + +@node Momentary Mark +@section Using Transient Mark Mode Momentarily + + If you don't like Transient Mark mode in general, you might still +want to use it once in a while. To do this, type @kbd{C-@key{SPC} +C-@key{SPC}} or @kbd{C-u C-x C-x}. These commands set or activate the +mark, and enable Transient Mark mode only until the mark is +deactivated. + +@table @kbd +@item C-@key{SPC} C-@key{SPC} +@kindex C-@key{SPC} C-@key{SPC} +Set the mark at point (like plain @kbd{C-@key{SPC}}), and enable +Transient Mark mode just once until the mark is deactivated. (This is +not really a separate command; you are using the @kbd{C-@key{SPC}} +command twice.) + +@item C-u C-x C-x +@kindex C-u C-x C-x +Activate the mark without changing it; enable Transient Mark mode just +once, until the mark is deactivated. (This is the @kbd{C-x C-x} +command, @code{exchange-point-and-mark}, with a prefix argument.) +@end table + + One of the secondary features of Transient Mark mode is that certain +commands operate only on the region, when there is an active region. +If you don't use Transient Mark mode, the region once set never +becomes inactive, so there is no way for these commands to make such a +distinction. Enabling Transient Mark mode momentarily gives you a way +to use these commands on the region. + + Momentary use of Transient Mark mode is also a way to highlight the +region for the time being. + +@node Using Region +@section Operating on the Region + +@cindex operations on a marked region + Once you have a region and the mark is active, here are some of the +ways you can operate on the region: + +@itemize @bullet +@item +Kill it with @kbd{C-w} (@pxref{Killing}). +@item +Save it in a register with @kbd{C-x r s} (@pxref{Registers}). +@item +Save it in a buffer or a file (@pxref{Accumulating Text}). +@item +Convert case with @kbd{C-x C-l} or @kbd{C-x C-u} (@pxref{Case}). +@item +Indent it with @kbd{C-x @key{TAB}} or @kbd{C-M-\} (@pxref{Indentation}). +@item +Fill it as text with @kbd{M-x fill-region} (@pxref{Filling}). +@item +Print hardcopy with @kbd{M-x print-region} (@pxref{Printing}). +@item +Evaluate it as Lisp code with @kbd{M-x eval-region} (@pxref{Lisp Eval}). +@item +Undo changes within it using @kbd{C-u C-x u} (@pxref{Undo}). +@end itemize + + Most commands that operate on the text in the region have the word +@code{region} in their names. + +@node Marking Objects +@section Commands to Mark Textual Objects + +@cindex marking sections of text + Here are the commands for placing point and the mark around a textual +object such as a word, list, paragraph or page. + +@table @kbd +@item M-@@ +Set mark after end of next word (@code{mark-word}). This command and +the following one do not move point. +@item C-M-@@ +Set mark after end of following balanced expression (@code{mark-sexp}). +@item M-h +Put region around current paragraph (@code{mark-paragraph}). +@item C-M-h +Put region around current defun (@code{mark-defun}). +@item C-x h +Put region around the entire buffer (@code{mark-whole-buffer}). +@item C-x C-p +Put region around current page (@code{mark-page}). +@end table + +@kbd{M-@@} (@code{mark-word}) puts the mark at the end of the next +word, while @kbd{C-M-@@} (@code{mark-sexp}) puts it at the end of the +next balanced expression (@pxref{Expressions}). These commands handle +arguments just like @kbd{M-f} and @kbd{C-M-f}. Repeating these +commands extends the region. For example, you can type either +@kbd{C-u 2 M-@@} or @kbd{M-@@ M-@@} to mark the next two words. These +commands also extend the region in Transient Mark mode, regardless of +the last command. + +@kindex C-x h +@findex mark-whole-buffer + Other commands set both point and mark, to delimit an object in the +buffer. For example, @kbd{M-h} (@code{mark-paragraph}) moves point to +the beginning of the paragraph that surrounds or follows point, and +puts the mark at the end of that paragraph (@pxref{Paragraphs}). It +prepares the region so you can indent, case-convert, or kill a whole +paragraph. With a prefix argument, if the argument's value is positive, +@kbd{M-h} marks that many paragraphs starting with the one surrounding +point. If the prefix argument is @minus{}@var{n}, @kbd{M-h} also +marks @var{n} paragraphs, running back form the one surrounding point. +In that last case, point moves forward to the end of that paragraph, +and the mark goes at the start of the region. Repeating the @kbd{M-h} +command extends the region to subsequent paragraphs. + + @kbd{C-M-h} (@code{mark-defun}) similarly puts point before, and the +mark after, the current (or following) major top-level definition, or +defun (@pxref{Moving by Defuns}). Repeating @kbd{C-M-h} extends +the region to subsequent defuns. + + @kbd{C-x C-p} (@code{mark-page}) puts point before the current page, +and mark at the end (@pxref{Pages}). The mark goes after the +terminating page delimiter (to include it in the region), while point +goes after the preceding page delimiter (to exclude it). A numeric +argument specifies a later page (if positive) or an earlier page (if +negative) instead of the current page. + + Finally, @kbd{C-x h} (@code{mark-whole-buffer}) sets up the entire +buffer as the region, by putting point at the beginning and the mark at +the end. (In some programs this is called ``select all.'') + + In Transient Mark mode, all of these commands activate the mark. + +@node Mark Ring +@section The Mark Ring + +@kindex C-u C-SPC +@cindex mark ring +@kindex C-u C-@@ + Aside from delimiting the region, the mark is also useful for +remembering a spot that you may want to go back to. To make this +feature more useful, each buffer remembers 16 previous locations of the +mark, in the @dfn{mark ring}. Commands that set the mark also push the +old mark onto this ring. To return to a marked location, use @kbd{C-u +C-@key{SPC}} (or @kbd{C-u C-@@}); this is the command +@code{set-mark-command} given a numeric argument. It moves point to +where the mark was, and restores the mark from the ring of former +marks. + +@vindex set-mark-command-repeat-pop + If you set @code{set-mark-command-repeat-pop} to non-@code{nil}, +then when you repeat the character @kbd{C-@key{SPC}} after typing +@kbd{C-u C-@key{SPC}}, each repetition moves point to a previous mark +position from the ring. The mark positions you move through in this +way are not lost; they go to the end of the ring. + + Each buffer has its own mark ring. All editing commands use the current +buffer's mark ring. In particular, @kbd{C-u C-@key{SPC}} always stays in +the same buffer. + + Many commands that can move long distances, such as @kbd{M-<} +(@code{beginning-of-buffer}), start by setting the mark and saving the +old mark on the mark ring. This is to make it easier for you to move +back later. Searches set the mark if they move point. However, in +Transient Mark mode, these commands do not set the mark when the mark +is already active. You can tell when a command sets the mark because +it displays @samp{Mark set} in the echo area. + + If you want to move back to the same place over and over, the mark +ring may not be convenient enough. If so, you can record the position +in a register for later retrieval (@pxref{RegPos,, Saving Positions in +Registers}). + +@vindex mark-ring-max + The variable @code{mark-ring-max} specifies the maximum number of +entries to keep in the mark ring. If that many entries exist and +another one is pushed, the earliest one in the list is discarded. Repeating +@kbd{C-u C-@key{SPC}} cycles through the positions currently in the +ring. + +@vindex mark-ring + The variable @code{mark-ring} holds the mark ring itself, as a list of +marker objects, with the most recent first. This variable is local in +every buffer. + +@node Global Mark Ring +@section The Global Mark Ring +@cindex global mark ring + + In addition to the ordinary mark ring that belongs to each buffer, +Emacs has a single @dfn{global mark ring}. It records a sequence of +buffers in which you have recently set the mark, so you can go back +to those buffers. + + Setting the mark always makes an entry on the current buffer's mark +ring. If you have switched buffers since the previous mark setting, the +new mark position makes an entry on the global mark ring also. The +result is that the global mark ring records a sequence of buffers that +you have been in, and, for each buffer, a place where you set the mark. + +@kindex C-x C-@key{SPC} +@findex pop-global-mark + The command @kbd{C-x C-@key{SPC}} (@code{pop-global-mark}) jumps to +the buffer and position of the latest entry in the global ring. It also +rotates the ring, so that successive uses of @kbd{C-x C-@key{SPC}} take +you to earlier and earlier buffers. + +@ignore + arch-tag: f35e4d82-911b-4cfc-a3d7-3c87b2abba20 +@end ignore diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi new file mode 100644 index 00000000000..b57e79420b6 --- /dev/null +++ b/doc/emacs/mini.texi @@ -0,0 +1,580 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Minibuffer, M-x, Basic, Top +@chapter The Minibuffer +@cindex minibuffer + + The @dfn{minibuffer} is where Emacs commands read complicated +arguments (anything more a single number). We call it the +``minibuffer'' because it's a special-purpose buffer with a small +amount of screen space. Minibuffer arguments can be file names, +buffer names, Lisp function names, Emacs command names, Lisp +expressions, and many other things---whatever the command wants to +read. You can use the usual Emacs editing commands in the minibuffer +to edit the argument text. + +@cindex prompt + When the minibuffer is in use, it appears in the echo area, with a +cursor. The minibuffer display starts with a @dfn{prompt} in a +distinct color; it says what kind of input is expected and how it will +be used. Often the prompt is derived from the name of the command +that is reading the argument. The prompt normally ends with a colon. + +@cindex default argument + Sometimes a @dfn{default argument} appears in the prompt, inside +parentheses before the colon. The default will be used as the +argument value if you just type @key{RET}. For example, commands that +read buffer names show a buffer name as the default. You can type +@key{RET} to operate on that default buffer. + + The simplest way to enter a minibuffer argument is to type the text, +then @key{RET} to exit the minibuffer. You can cancel the minibuffer, +and the command that wants the argument, by typing @kbd{C-g}. + + Since the minibuffer appears in the echo area, it can conflict with +other uses of the echo area. Here is how Emacs handles such +conflicts: + +@itemize @bullet +@item +An error occurs while the minibuffer is active. + +The error message hides the minibuffer for a few seconds, or until you +type something. Then the minibuffer comes back. + +@item +A command such as @kbd{C-x =} needs to display a message in the echo +area. + +The message hides the minibuffer for a few seconds, or until you type +something. Then the minibuffer comes back. + +@item +Keystrokes don't echo while the minibuffer is in use. +@end itemize + +@menu +* File: Minibuffer File. Entering file names with the minibuffer. +* Edit: Minibuffer Edit. How to edit in the minibuffer. +* Completion:: An abbreviation facility for minibuffer input. +* Minibuffer History:: Reusing recent minibuffer arguments. +* Repetition:: Re-executing commands that used the minibuffer. +@end menu + +@node Minibuffer File +@section Minibuffers for File Names + + When you use the minibuffer to enter a file name, it starts out with +some initial text---the @dfn{default directory}, ending in a slash. +The file you specify will be in this directory unless you alter or +replace it. + +@c Separate paragraph to clean up ugly page break--rms +@need 1500 + For example, if the minibuffer starts out with these contents: + +@example +Find File: /u2/emacs/src/ +@end example + +@noindent +(where @samp{Find File:@: } is the prompt), and you type +@kbd{buffer.c} as input, that specifies the file +@file{/u2/emacs/src/buffer.c}. You can specify the parent directory +by adding @file{..}; thus, if you type @kbd{../lisp/simple.el}, you +will get @file{/u2/emacs/lisp/simple.el}. Alternatively, you can use +@kbd{M-@key{DEL}} to kill the directory names you don't want +(@pxref{Words}). + + You can kill the entire default with @kbd{C-a C-k}, but there's no +need to do that. It's easier to ignore the default, and enter an +absolute file name starting with a slash or a tilde after the default +directory. For example, to specify @file{/etc/termcap}, just type +that name: + +@example +Find File: /u2/emacs/src//etc/termcap +@end example + +@noindent +@cindex // in file name +@cindex double slash in file name +@cindex slashes repeated in file name +@findex file-name-shadow-mode +GNU Emacs interprets a double slash (which is not normally useful in +file names) as, ``ignore everything before the second slash in the +pair.'' In the example above. @samp{/u2/emacs/src/} is ignored, so +you get @file{/etc/termcap}. The ignored part of the file name is +dimmed if the terminal allows it; to disable this dimming, turn off +File Name Shadow mode (a minor mode) with the command +@kbd{M-x file-name-shadow-mode}. + + If the variable @code{insert-default-directory} is @code{nil}, the +default directory is never inserted in the minibuffer---so the +minibuffer starts out empty. Nonetheless, relative file name +arguments are still interpreted based on the same default directory. + +@node Minibuffer Edit +@section Editing in the Minibuffer + + The minibuffer is an Emacs buffer (albeit a peculiar one), and the +usual Emacs commands are available for editing the argument text. + + Since @key{RET} in the minibuffer is defined to exit the minibuffer, +you can't use it to insert a newline in the minibuffer. To do that, +type @kbd{C-o} or @kbd{C-q C-j}. (The newline character is really the +@acronym{ASCII} character control-J.) + + The minibuffer has its own window, which normally has space in the +frame at all times, but it only acts like an Emacs window when the +minibuffer is active. When active, this window is much like any other +Emacs window; for instance, you can switch to another window (with +@kbd{C-x o}), edit text there, then return to the minibuffer window to +finish the argument. You can even kill text in another window, return +to the minibuffer window, and then yank the text into the argument. +@xref{Windows}. + +@cindex height of minibuffer +@cindex size of minibuffer +@cindex growing minibuffer +@cindex resizing minibuffer + There are some restrictions on the minibuffer window, however: you +cannot kill it, or split it, or switch buffers in it---the minibuffer +and its window are permanently attached. + +@vindex resize-mini-windows + The minibuffer window expands vertically as necessary to hold the +text that you put in the minibuffer. If @code{resize-mini-windows} is +@code{t} (the default), the window always resizes as needed by its +contents. If its value is the symbol @code{grow-only}, the window +grows automatically as needed, but shrinks (back to the normal size) +only when the minibuffer becomes inactive. If its value is +@code{nil}, you have to adjust the height yourself. + +@vindex max-mini-window-height + The variable @code{max-mini-window-height} controls the maximum +height for resizing the minibuffer window: a floating-point number +specifies a fraction of the frame's height; an integer specifies the +maximum number of lines; @code{nil} means do not resize the minibuffer +window automatically. The default value is 0.25. + + The @kbd{C-M-v} command in the minibuffer scrolls the help text from +commands that display help text of any sort in another window. +@kbd{M-@key{PAGEUP}} and @kbd{M-@key{PAGEDOWN}} also operate on that +help text. This is especially useful with long lists of possible +completions. @xref{Other Window}. + +@vindex enable-recursive-minibuffers + Emacs normally disallows most commands that use the minibuffer while +the minibuffer is active. (Entering the minibuffer from the +minibuffer can be confusing.) To allow such commands in the +minibuffer, set the variable @code{enable-recursive-minibuffers} to +@code{t}. + +@node Completion +@section Completion +@cindex completion + + Some arguments allow @dfn{completion} to enter their value. This +means that after you type part of the argument, Emacs can fill in the +rest, or some of it, based on what you have typed so far. + + When completion is available, certain keys---@key{TAB}, @key{RET}, +and @key{SPC}---are rebound to complete the text in the minibuffer +before point into a longer string chosen from a set of @dfn{completion +alternatives} provided by the command that requested the argument. +(@key{SPC} does not do completion in reading file names, because it is +common to use spaces in file names on some systems.) @kbd{?} displays +a list of the possible completions at any time. + + For example, @kbd{M-x} uses the minibuffer to read the name of a +command, so it provides a list of all Emacs command names for +completion candidates. The completion keys match the minibuffer text +against these candidates, find any additional name characters implied +by the text already present in the minibuffer, and add those +characters. This makes it possible to type @kbd{M-x ins @key{SPC} b +@key{RET}} instead of @kbd{M-x insert-buffer @key{RET}}, for example. + + Case is significant in completion when it is significant in the +argument you are entering (buffer names, file names, command names, +for instance). Thus, @samp{fo} does not complete to @samp{Foo}. +Completion ignores case distinctions for certain arguments in which +case does not matter. + + Completion acts only on the text before point. If there is text in +the minibuffer after point---i.e., if you move point backward after +typing some text into the minibuffer---it remains unchanged. + +@menu +* Example: Completion Example. Examples of using completion. +* Commands: Completion Commands. A list of completion commands. +* Strict Completion:: Different types of completion. +* Options: Completion Options. Options for completion. +@end menu + +@node Completion Example +@subsection Completion Example + +@kindex TAB @r{(completion)} + A concrete example may help here. If you type @kbd{M-x au +@key{TAB}}, the @key{TAB} looks for alternatives (in this case, +command names) that start with @samp{au}. There are several, +including @code{auto-fill-mode} and @code{auto-save-mode}, but they +all begin with @code{auto-}, so the @samp{au} in the minibuffer +completes to @samp{auto-}. + + If you type @key{TAB} again immediately, it cannot determine the +next character; it could be any of @samp{cfilrs}. So it does not add +any characters; instead, @key{TAB} displays a list of all possible +completions in another window. + + Now type @kbd{f @key{TAB}}. This @key{TAB} sees @samp{auto-f}. The +only command name starting with that is @code{auto-fill-mode}, so +completion fills in the rest of that. You have been able to enter +@samp{auto-fill-mode} by typing just @kbd{au @key{TAB} f @key{TAB}}. + +@node Completion Commands +@subsection Completion Commands + + Here is a list of the completion commands defined in the minibuffer +when completion is allowed. + +@table @kbd +@item @key{TAB} +@findex minibuffer-complete +Complete the text before point in the minibuffer as much as possible +(@code{minibuffer-complete}). +@item @key{SPC} +Complete up to one word from the minibuffer text before point +(@code{minibuffer-complete-word}). @key{SPC} for completion is not +available when entering a file name, since file names often include +spaces. +@item @key{RET} +Submit the text in the minibuffer as the argument, possibly completing +first as described +@iftex +in the next subsection (@code{minibuffer-complete-and-exit}). +@end iftex +@ifnottex +in the next node (@code{minibuffer-complete-and-exit}). @xref{Strict +Completion}. +@end ifnottex +@item ? +Display a list of possible completions of the text before point +(@code{minibuffer-completion-help}). +@end table + +@kindex SPC +@findex minibuffer-complete-word + @key{SPC} completes like @key{TAB}, but only up to the next hyphen +or space. If you have @samp{auto-f} in the minibuffer and type +@key{SPC}, it finds that the completion is @samp{auto-fill-mode}, but +it only inserts @samp{ill-}, giving @samp{auto-fill-}. Another +@key{SPC} at this point completes all the way to +@samp{auto-fill-mode}. The command that implements this behavior is +called @code{minibuffer-complete-word}. + + When you display a list of possible completions, you can choose +one from it: + +@table @kbd +@findex mouse-choose-completion +@item Mouse-1 +@itemx Mouse-2 +Clicking mouse button 1 or 2 on a completion possibility chooses that +completion (@code{mouse-choose-completion}). You must click in the +list of completions, not in the minibuffer. + +@findex switch-to-completions +@item @key{PRIOR} +@itemx M-v +Typing @key{PRIOR} or @key{PAGE-UP}, or @kbd{M-v}, while in the +minibuffer, selects the window showing the completion list buffer +(@code{switch-to-completions}). This paves the way for using the +commands below. (Selecting that window in other ways has the same +effect.) + +@findex choose-completion +@item @key{RET} +Typing @key{RET} @emph{in the completion list buffer} chooses the +completion that point is in or next to (@code{choose-completion}). To +use this command, you must first switch to the completion list window. + +@findex next-completion +@item @key{RIGHT} +Typing the right-arrow key @key{RIGHT} @emph{in the completion list +buffer} moves point to the following completion possibility +(@code{next-completion}). + +@findex previous-completion +@item @key{LEFT} +Typing the left-arrow key @key{LEFT} @emph{in the completion list +buffer} moves point to the previous completion possibility +(@code{previous-completion}). +@end table + +@node Strict Completion +@subsection Strict Completion + + There are three different ways that @key{RET} can do completion, +depending on how the argument will be used. + +@itemize @bullet +@item +@dfn{Strict} completion accepts only known completion candidates. For +example, when @kbd{C-x k} reads the name of a buffer to kill, only the +name of an existing buffer makes sense. In strict completion, +@key{RET} refuses to exit if the text in the minibuffer does not +complete to an exact match. + +@item +@dfn{Cautious} completion is similar to strict completion, except that +@key{RET} exits only if the text is an already exact match. +Otherwise, @key{RET} does not exit, but it does complete the text. If +that completes to an exact match, a second @key{RET} will exit. + +Cautious completion is used for reading file names for files that must +already exist, for example. + +@item +@dfn{Permissive} completion allows any input; the completion +candidates are just suggestions. For example, when @kbd{C-x C-f} +reads the name of a file to visit, any file name is allowed, including +nonexistent file (in case you want to create a file). In permissive +completion, @key{RET} does not complete, it just submits the argument +as you have entered it. +@end itemize + + The completion commands display a list of all possible completions +whenever they can't determine even one more character by completion. +Also, typing @kbd{?} explicitly requests such a list. You can scroll +the list with @kbd{C-M-v} (@pxref{Other Window}). + +@node Completion Options +@subsection Completion Options + +@vindex completion-ignored-extensions +@cindex ignored file names, in completion + When completing file names, certain file names are usually ignored. +The variable @code{completion-ignored-extensions} contains a list of +strings; a file name ending in any of those strings is ignored as a +completion candidate. The standard value of this variable has several +elements including @code{".o"}, @code{".elc"}, @code{".dvi"} and +@code{"~"}. The effect is that, for example, @samp{foo} can complete +to @samp{foo.c} even though @samp{foo.o} exists as well. However, if +@emph{all} the possible completions end in ``ignored'' strings, then +they are not ignored. Displaying a list of possible completions +disregards @code{completion-ignored-extensions}; it shows them all. + + If an element of @code{completion-ignored-extensions} ends in a +slash (@file{/}), it's a subdirectory name; then that directory and +its contents are ignored. Elements of +@code{completion-ignored-extensions} which do not end in a slash are +ordinary file names, and do not apply to names of directories. + +@vindex completion-auto-help + If @code{completion-auto-help} is set to @code{nil}, the completion +commands never display a list of possibilities; you must type @kbd{?} +to display the list. + +@cindex Partial Completion mode +@vindex partial-completion-mode +@findex partial-completion-mode + Partial Completion mode implements a more powerful kind of +completion that can complete multiple words in parallel. For example, +it can complete the command name abbreviation @code{p-b} into +@code{print-buffer} if no other command starts with two words whose +initials are @samp{p} and @samp{b}. + + To enable this mode, use @kbd{M-x partial-completion-mode}, or +customize the variable @code{partial-completion-mode}. This mode +binds special partial completion commands to @key{TAB}, @key{SPC}, +@key{RET}, and @kbd{?} in the minibuffer. The usual completion +commands are available on @kbd{M-@key{TAB}} (or @kbd{C-M-i}), +@kbd{M-@key{SPC}}, @kbd{M-@key{RET}} and @kbd{M-?}. + + Partial completion of directories in file names uses @samp{*} to +indicate the places for completion; thus, @file{/u*/b*/f*} might +complete to @file{/usr/bin/foo}. For remote files, partial completion +enables completion of methods, user names and host names. +@xref{Remote Files}. + +@vindex PC-include-file-path +@vindex PC-disable-includes + Partial Completion mode also extends @code{find-file} so that +@samp{<@var{include}>} looks for the file named @var{include} in the +directories in the path @code{PC-include-file-path}. If you set +@code{PC-disable-includes} to non-@code{nil}, this feature is +disabled. + +@cindex Icomplete mode +@findex icomplete-mode + Icomplete mode presents a constantly-updated display that tells you +what completions are available for the text you've entered so far. The +command to enable or disable this minor mode is @kbd{M-x +icomplete-mode}. + +@node Minibuffer History +@section Minibuffer History +@cindex minibuffer history +@cindex history of minibuffer input + + Every argument that you enter with the minibuffer is saved on a +@dfn{minibuffer history list} so you can easily use it again later. +Special commands fetch the text of an earlier argument into the +minibuffer, replacing the old minibuffer contents. You can think of +them as moving through the history of previous arguments. + +@table @kbd +@item @key{UP} +@itemx M-p +Move to the previous item in the minibuffer history, an earlier argument +(@code{previous-history-element}). +@item @key{DOWN} +@itemx M-n +Move to the next item in the minibuffer history +(@code{next-history-element}). +@item M-r @var{regexp} @key{RET} +Move to an earlier item in the minibuffer history that +matches @var{regexp} (@code{previous-matching-history-element}). +@item M-s @var{regexp} @key{RET} +Move to a later item in the minibuffer history that matches +@var{regexp} (@code{next-matching-history-element}). +@end table + +@kindex M-p @r{(minibuffer history)} +@kindex M-n @r{(minibuffer history)} +@findex next-history-element +@findex previous-history-element + To move through the minibuffer history list one item at a time, use +@kbd{M-p} or up-arrow (@code{previous-history-element}) to fetch the +next earlier minibuffer input, and use @kbd{M-n} or down-arrow +(@code{next-history-element}) to fetch the next later input. These +commands don't move the cursor, they pull different saved strings into +the minibuffer. But you can think of them as ``moving'' through the +history list. + + The input that you fetch from the history entirely replaces the +contents of the minibuffer. To use it again unchanged, just type +@key{RET}. You can also edit the text before you reuse it; this does +not change the history element that you ``moved'' to, but your new +argument does go at the end of the history list in its own right. + + For many minibuffer arguments there is a ``default'' value. You can +insert the default value into the minibuffer as text by using +@kbd{M-n}. You can think of this as moving ``into the future'' in the +history. + +@findex previous-matching-history-element +@findex next-matching-history-element +@kindex M-r @r{(minibuffer history)} +@kindex M-s @r{(minibuffer history)} + There are also commands to search forward or backward through the +history; they search for history elements that match a regular +expression. @kbd{M-r} (@code{previous-matching-history-element}) +searches older elements in the history, while @kbd{M-s} +(@code{next-matching-history-element}) searches newer elements. These +commands are unusual; they use the minibuffer to read the regular +expression even though they are invoked from the minibuffer. As with +incremental searching, an upper-case letter in the regular expression +makes the search case-sensitive (@pxref{Search Case}). + +@ignore + We may change the precise way these commands read their arguments. +Perhaps they will search for a match for the string given so far in the +minibuffer; perhaps they will search for a literal match rather than a +regular expression match; perhaps they will only accept matches at the +beginning of a history element; perhaps they will read the string to +search for incrementally like @kbd{C-s}. To find out what interface is +actually available, type @kbd{C-h f previous-matching-history-element}. +@end ignore + + All uses of the minibuffer record your input on a history list, but +there are separate history lists for different kinds of arguments. +For example, there is a list for file names, used by all the commands +that read file names. (As a special feature, this history list +records the absolute file name, even if the name you entered was not +absolute.) + + There are several other specific history lists, including one for +buffer names, one for arguments of commands like @code{query-replace}, +one used by @kbd{M-x} for command names, and one used by +@code{compile} for compilation commands. Finally, there is one +``miscellaneous'' history list that most minibuffer arguments use. + +@vindex history-length + The variable @code{history-length} specifies the maximum length of a +minibuffer history list; adding a new element deletes the oldest +element if the list gets too long. If the value of +@code{history-length} is @code{t}, though, there is no maximum length. + +@vindex history-delete-duplicates + The variable @code{history-delete-duplicates} specifies whether to +delete duplicates in history. If it is @code{t}, adding a new element +deletes from the list all other elements that are equal to it. + +@node Repetition +@section Repeating Minibuffer Commands +@cindex command history +@cindex history of commands + + Every command that uses the minibuffer once is recorded on a special +history list, the @dfn{command history}, together with the values of +its arguments, so that you can repeat the entire command. In +particular, every use of @kbd{M-x} is recorded there, since @kbd{M-x} +uses the minibuffer to read the command name. + +@findex list-command-history +@table @kbd +@item C-x @key{ESC} @key{ESC} +Re-execute a recent minibuffer command from the command history + (@code{repeat-complex-command}). +@item M-x list-command-history +Display the entire command history, showing all the commands +@kbd{C-x @key{ESC} @key{ESC}} can repeat, most recent first. +@end table + +@kindex C-x ESC ESC +@findex repeat-complex-command + @kbd{C-x @key{ESC} @key{ESC}} is used to re-execute a recent command +that used the minibuffer. With no argument, it repeats the last such +command. A numeric argument specifies which command to repeat; 1 +means the last one, 2 the previous, and so on. + + @kbd{C-x @key{ESC} @key{ESC}} works by turning the previous command +into a Lisp expression and then entering a minibuffer initialized with +the text for that expression. Even if you don't understand Lisp +syntax, it will probably be obvious which command is displayed for +repetition. If you type just @key{RET}, that repeats the command +unchanged. You can also change the command by editing the Lisp +expression before you execute it. The repeated command is added to +the front of the command history unless it is identical to the most +recently item. + + Once inside the minibuffer for @kbd{C-x @key{ESC} @key{ESC}}, you can +use the minibuffer history commands (@kbd{M-p}, @kbd{M-n}, @kbd{M-r}, +@kbd{M-s}; @pxref{Minibuffer History}) to move through the history list +of saved entire commands. After finding the desired previous command, +you can edit its expression as usual and then repeat it by typing +@key{RET}. + +@vindex isearch-resume-in-command-history + Incremental search does not, strictly speaking, use the minibuffer. +Therefore, although it behaves like a complex command, it normally +does not appear in the history list for @kbd{C-x @key{ESC} @key{ESC}}. +You can make incremental search commands appear in the history by +setting @code{isearch-resume-in-command-history} to a non-@code{nil} +value. @xref{Incremental Search}. + +@vindex command-history + The list of previous minibuffer-using commands is stored as a Lisp +list in the variable @code{command-history}. Each element is a Lisp +expression which describes one command and its arguments. Lisp programs +can re-execute a command by calling @code{eval} with the +@code{command-history} element. + +@ignore + arch-tag: ba913cfd-b70e-400f-b663-22b2c309227f +@end ignore diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi new file mode 100644 index 00000000000..c4cdea4359d --- /dev/null +++ b/doc/emacs/misc.texi @@ -0,0 +1,2559 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@iftex +@chapter Miscellaneous Commands + + This chapter contains several brief topics that do not fit anywhere +else: reading netnews, running shell commands and shell subprocesses, +using a single shared Emacs for utilities that expect to run an editor +as a subprocess, printing hardcopy, sorting text, narrowing display to +part of the buffer, editing double-column files and binary files, +saving an Emacs session for later resumption, following hyperlinks, +browsing images, emulating other editors, and various diversions and +amusements. + +@end iftex + +@ifnottex +@raisesections +@end ifnottex + +@node Gnus, Shell, Calendar/Diary, Top +@section Gnus +@cindex Gnus +@cindex reading netnews + +Gnus is an Emacs package primarily designed for reading and posting +Usenet news. It can also be used to read and respond to messages from a +number of other sources---mail, remote directories, digests, and so on. + +Here we introduce Gnus and describe several basic features. +@ifnottex +For full details, see @ref{Top, Gnus,, gnus, The Gnus Manual}. +@end ifnottex +@iftex +For full details on Gnus, type @kbd{M-x info} and then select the Gnus +manual. +@end iftex + +@findex gnus +To start Gnus, type @kbd{M-x gnus @key{RET}}. + +@menu +* Buffers of Gnus:: The group, summary, and article buffers. +* Gnus Startup:: What you should know about starting Gnus. +* Summary of Gnus:: A short description of the basic Gnus commands. +@end menu + +@node Buffers of Gnus +@subsection Gnus Buffers + +Unlike most Emacs packages, Gnus uses several buffers to display +information and to receive commands. The three Gnus buffers users use +most are the @dfn{group buffer}, the @dfn{summary buffer} and the +@dfn{article buffer}. + +The @dfn{group buffer} contains a list of newsgroups. This is the +first buffer Gnus displays when it starts up. It normally displays +only the groups to which you subscribe and that contain unread +articles. Use this buffer to select a specific group. + +The @dfn{summary buffer} lists one line for each article in a single +group. By default, the author, the subject and the line number are +displayed for each article, but this is customizable, like most aspects +of Gnus display. The summary buffer is created when you select a group +in the group buffer, and is killed when you exit the group. Use this +buffer to select an article. + +The @dfn{article buffer} displays the article. In normal Gnus usage, +you see this buffer but you don't select it---all useful +article-oriented commands work in the summary buffer. But you can +select the article buffer, and execute all Gnus commands from that +buffer, if you want to. + +@node Gnus Startup +@subsection When Gnus Starts Up + +At startup, Gnus reads your @file{.newsrc} news initialization file +and attempts to communicate with the local news server, which is a +repository of news articles. The news server need not be the same +computer you are logged in on. + +If you start Gnus and connect to the server, but do not see any +newsgroups listed in the group buffer, type @kbd{L} or @kbd{A k} to get +a listing of all the groups. Then type @kbd{u} to toggle +subscription to groups. + +The first time you start Gnus, Gnus subscribes you to a few selected +groups. All other groups start out as @dfn{killed groups} for you; you +can list them with @kbd{A k}. All new groups that subsequently come to +exist at the news server become @dfn{zombie groups} for you; type @kbd{A +z} to list them. You can subscribe to a group shown in these lists +using the @kbd{u} command. + +When you quit Gnus with @kbd{q}, it automatically records in your +@file{.newsrc} and @file{.newsrc.eld} initialization files the +subscribed or unsubscribed status of all groups. You should normally +not edit these files manually, but you may if you know how. + +@node Summary of Gnus +@subsection Summary of Gnus Commands + +Reading news is a two-step process: + +@enumerate +@item +Choose a group in the group buffer. + +@item +Select articles from the summary buffer. Each article selected is +displayed in the article buffer in a large window, below the summary +buffer in its small window. +@end enumerate + + Each Gnus buffer has its own special commands; the meanings of any +given key in the various Gnus buffers are usually analogous, even if +not identical. Here are commands for the group and summary buffers: + +@table @kbd +@kindex q @r{(Gnus Group mode)} +@findex gnus-group-exit +@item q +In the group buffer, update your @file{.newsrc} initialization file +and quit Gnus. + +In the summary buffer, exit the current group and return to the +group buffer. Thus, typing @kbd{q} twice quits Gnus. + +@kindex L @r{(Gnus Group mode)} +@findex gnus-group-list-all-groups +@item L +In the group buffer, list all the groups available on your news +server (except those you have killed). This may be a long list! + +@kindex l @r{(Gnus Group mode)} +@findex gnus-group-list-groups +@item l +In the group buffer, list only the groups to which you subscribe and +which contain unread articles. + +@kindex u @r{(Gnus Group mode)} +@findex gnus-group-unsubscribe-current-group +@cindex subscribe groups +@cindex unsubscribe groups +@item u +In the group buffer, unsubscribe from (or subscribe to) the group listed +in the line that point is on. When you quit Gnus by typing @kbd{q}, +Gnus lists in your @file{.newsrc} file which groups you have subscribed +to. The next time you start Gnus, you won't see this group, +because Gnus normally displays only subscribed-to groups. + +@kindex C-k @r{(Gnus)} +@findex gnus-group-kill-group +@item C-k +In the group buffer, ``kill'' the current line's group---don't +even list it in @file{.newsrc} from now on. This affects future +Gnus sessions as well as the present session. + +When you quit Gnus by typing @kbd{q}, Gnus writes information +in the file @file{.newsrc} describing all newsgroups except those you +have ``killed.'' + +@kindex SPC @r{(Gnus)} +@findex gnus-group-read-group +@item @key{SPC} +In the group buffer, select the group on the line under the cursor +and display the first unread article in that group. + +@need 1000 +In the summary buffer, + +@itemize @bullet +@item +Select the article on the line under the cursor if none is selected. + +@item +Scroll the text of the selected article (if there is one). + +@item +Select the next unread article if at the end of the current article. +@end itemize + +Thus, you can move through all the articles by repeatedly typing @key{SPC}. + +@kindex DEL @r{(Gnus)} +@item @key{DEL} +In the group buffer, move point to the previous group containing +unread articles. + +@findex gnus-summary-prev-page +In the summary buffer, scroll the text of the article backwards. + +@kindex n @r{(Gnus)} +@findex gnus-group-next-unread-group +@findex gnus-summary-next-unread-article +@item n +Move point to the next unread group, or select the next unread article. + +@kindex p @r{(Gnus)} +@findex gnus-group-prev-unread-group +@findex gnus-summary-prev-unread-article +@item p +Move point to the previous unread group, or select the previous +unread article. + +@kindex C-n @r{(Gnus Group mode)} +@findex gnus-group-next-group +@kindex C-p @r{(Gnus Group mode)} +@findex gnus-group-prev-group +@kindex C-n @r{(Gnus Summary mode)} +@findex gnus-summary-next-subject +@kindex C-p @r{(Gnus Summary mode)} +@findex gnus-summary-prev-subject +@item C-n +@itemx C-p +Move point to the next or previous item, even if it is marked as read. +This does not select the article or group on that line. + +@kindex s @r{(Gnus Summary mode)} +@findex gnus-summary-isearch-article +@item s +In the summary buffer, do an incremental search of the current text in +the article buffer, just as if you switched to the article buffer and +typed @kbd{C-s}. + +@kindex M-s @r{(Gnus Summary mode)} +@findex gnus-summary-search-article-forward +@item M-s @var{regexp} @key{RET} +In the summary buffer, search forward for articles containing a match +for @var{regexp}. + +@end table + +@ignore +@node Where to Look +@subsection Where to Look Further + +@c Too many references to the name of the manual if done with xref in TeX! +Gnus is powerful and customizable. Here are references to a few +@ifnottex +additional topics: + +@end ifnottex +@iftex +additional topics in @cite{The Gnus Manual}: + +@itemize @bullet +@item +Follow discussions on specific topics.@* +See section ``Threading.'' + +@item +Read digests. See section ``Document Groups.'' + +@item +Refer to and jump to the parent of the current article.@* +See section ``Finding the Parent.'' + +@item +Refer to articles by using Message-IDs included in the messages.@* +See section ``Article Keymap.'' + +@item +Save articles. See section ``Saving Articles.'' + +@item +Have Gnus score articles according to various criteria, like author +name, subject, or string in the body of the articles.@* +See section ``Scoring.'' + +@item +Send an article to a newsgroup.@* +See section ``Composing Messages.'' +@end itemize +@end iftex +@ifnottex +@itemize @bullet +@item +Follow discussions on specific topics.@* +@xref{Threading, , Reading Based on Conversation Threads, +gnus, The Gnus Manual}. + +@item +Read digests. @xref{Document Groups, , , gnus, The Gnus Manual}. + +@item +Refer to and jump to the parent of the current article.@* +@xref{Finding the Parent, , , gnus, The Gnus Manual}. + +@item +Refer to articles by using Message-IDs included in the messages.@* +@xref{Article Keymap, , , gnus, The Gnus Manual}. + +@item +Save articles. @xref{Saving Articles, , , gnus, The Gnus Manual}. + +@item +Have Gnus score articles according to various criteria, like author +name, subject, or string in the body of the articles.@* +@xref{Scoring, , , gnus, The Gnus Manual}. + +@item +Send an article to a newsgroup.@* +@xref{Composing Messages, , , gnus, The Gnus Manual}. +@end itemize +@end ifnottex +@end ignore + +@node Shell, Emacs Server, Gnus, Top +@section Running Shell Commands from Emacs +@cindex subshell +@cindex shell commands + + Emacs has commands for passing single command lines to inferior shell +processes; it can also run a shell interactively with input and output +to an Emacs buffer named @samp{*shell*} or run a shell inside a terminal +emulator window. + +@table @kbd +@item M-! @var{cmd} @key{RET} +Run the shell command line @var{cmd} and display the output +(@code{shell-command}). +@item M-| @var{cmd} @key{RET} +Run the shell command line @var{cmd} with region contents as input; +optionally replace the region with the output +(@code{shell-command-on-region}). +@item M-x shell +Run a subshell with input and output through an Emacs buffer. +You can then give commands interactively. +@item M-x term +Run a subshell with input and output through an Emacs buffer. +You can then give commands interactively. +Full terminal emulation is available. +@end table + + @kbd{M-x eshell} invokes a shell implemented entirely in Emacs. It +is documented in a separate manual. @xref{Top,Eshell,Eshell, eshell, +Eshell: The Emacs Shell}. + +@menu +* Single Shell:: How to run one shell command and return. +* Interactive Shell:: Permanent shell taking input via Emacs. +* Shell Mode:: Special Emacs commands used with permanent shell. +* Shell Prompts:: Two ways to recognize shell prompts. +* History: Shell History. Repeating previous commands in a shell buffer. +* Directory Tracking:: Keeping track when the subshell changes directory. +* Options: Shell Options. Options for customizing Shell mode. +* Terminal emulator:: An Emacs window as a terminal emulator. +* Term Mode:: Special Emacs commands used in Term mode. +* Paging in Term:: Paging in the terminal emulator. +* Remote Host:: Connecting to another computer. +@end menu + +@node Single Shell +@subsection Single Shell Commands + +@kindex M-! +@findex shell-command + @kbd{M-!} (@code{shell-command}) reads a line of text using the +minibuffer and executes it as a shell command in a subshell made just +for that command. Standard input for the command comes from the null +device. If the shell command produces any output, the output appears +either in the echo area (if it is short), or in an Emacs buffer named +@samp{*Shell Command Output*}, which is displayed in another window +but not selected (if the output is long). + + For instance, one way to decompress a file @file{foo.gz} from Emacs +is to type @kbd{M-! gunzip foo.gz @key{RET}}. That shell command +normally creates the file @file{foo} and produces no terminal output. + + A numeric argument, as in @kbd{M-1 M-!}, says to insert terminal +output into the current buffer instead of a separate buffer. It puts +point before the output, and sets the mark after the output. For +instance, @kbd{M-1 M-! gunzip < foo.gz @key{RET}} would insert the +uncompressed equivalent of @file{foo.gz} into the current buffer. + + If the shell command line ends in @samp{&}, it runs asynchronously. +For a synchronous shell command, @code{shell-command} returns the +command's exit status (0 means success), when it is called from a Lisp +program. You do not get any status information for an asynchronous +command, since it hasn't finished yet when @code{shell-command} returns. + +@kindex M-| +@findex shell-command-on-region + @kbd{M-|} (@code{shell-command-on-region}) is like @kbd{M-!} but +passes the contents of the region as the standard input to the shell +command, instead of no input. With a numeric argument, meaning insert +the output in the current buffer, it deletes the old region and the +output replaces it as the contents of the region. It returns the +command's exit status, like @kbd{M-!}. + + One use for @kbd{M-|} is to run @code{gpg} to see what keys are in +the buffer. For instance, if the buffer contains a GPG key, type +@kbd{C-x h M-| gpg @key{RET}} to feed the entire buffer contents to +the @code{gpg} program. That program will ignore everything except +the encoded keys, and will output a list of the keys the buffer +contains. + +@vindex shell-file-name + Both @kbd{M-!} and @kbd{M-|} use @code{shell-file-name} to specify +the shell to use. This variable is initialized based on your +@env{SHELL} environment variable when Emacs is started. If the file +name is relative, Emacs searches the directories in the list +@code{exec-path}; this list is initialized based on the environment +variable @env{PATH} when Emacs is started. Your @file{.emacs} file +can override either or both of these default initializations. + + Both @kbd{M-!} and @kbd{M-|} wait for the shell command to complete, +unless you end the command with @samp{&} to make it asynchronous. To +stop waiting, type @kbd{C-g} to quit; that terminates the shell +command with the signal @code{SIGINT}---the same signal that @kbd{C-c} +normally generates in the shell. Emacs then waits until the command +actually terminates. If the shell command doesn't stop (because it +ignores the @code{SIGINT} signal), type @kbd{C-g} again; this sends +the command a @code{SIGKILL} signal which is impossible to ignore. + + Asynchronous commands ending in @samp{&} feed their output into +the buffer @samp{*Async Shell Command*}. Output arrives in that +buffer regardless of whether it is visible in a window. + + To specify a coding system for @kbd{M-!} or @kbd{M-|}, use the command +@kbd{C-x @key{RET} c} immediately beforehand. @xref{Communication Coding}. + +@vindex shell-command-default-error-buffer + Error output from these commands is normally intermixed with the +regular output. But if the variable +@code{shell-command-default-error-buffer} has a string as value, and +it's the name of a buffer, @kbd{M-!} and @kbd{M-|} insert error output +before point in that buffer. + +@node Interactive Shell +@subsection Interactive Inferior Shell + +@findex shell + To run a subshell interactively, putting its typescript in an Emacs +buffer, use @kbd{M-x shell}. This creates (or reuses) a buffer named +@samp{*shell*} and runs a subshell with input coming from and output going +to that buffer. That is to say, any ``terminal output'' from the subshell +goes into the buffer, advancing point, and any ``terminal input'' for +the subshell comes from text in the buffer. To give input to the subshell, +go to the end of the buffer and type the input, terminated by @key{RET}. + + Emacs does not wait for the subshell to do anything. You can switch +windows or buffers and edit them while the shell is waiting, or while it is +running a command. Output from the subshell waits until Emacs has time to +process it; this happens whenever Emacs is waiting for keyboard input or +for time to elapse. + +@cindex @code{comint-highlight-input} face +@cindex @code{comint-highlight-prompt} face + Input lines, once you submit them, are displayed using the face +@code{comint-highlight-input}, and prompts are displayed using the +face @code{comint-highlight-prompt}. This makes it easier to see +previous input lines in the buffer. @xref{Faces}. + + To make multiple subshells, you can invoke @kbd{M-x shell} with a +prefix argument (e.g. @kbd{C-u M-x shell}), which will read a buffer +name and create (or reuse) a subshell in that buffer. You can also +rename the @samp{*shell*} buffer using @kbd{M-x rename-uniquely}, then +create a new @samp{*shell*} buffer using plain @kbd{M-x shell}. +Subshells in different buffers run independently and in parallel. + +@vindex explicit-shell-file-name +@cindex environment variables for subshells +@cindex @env{ESHELL} environment variable +@cindex @env{SHELL} environment variable + The file name used to load the subshell is the value of the variable +@code{explicit-shell-file-name}, if that is non-@code{nil}. Otherwise, +the environment variable @env{ESHELL} is used, or the environment +variable @env{SHELL} if there is no @env{ESHELL}. If the file name +specified is relative, the directories in the list @code{exec-path} are +searched; this list is initialized based on the environment variable +@env{PATH} when Emacs is started. Your @file{.emacs} file can override +either or both of these default initializations. + + Emacs sends the new shell the contents of the file +@file{~/.emacs_@var{shellname}} as input, if it exists, where +@var{shellname} is the name of the file that the shell was loaded +from. For example, if you use bash, the file sent to it is +@file{~/.emacs_bash}. If this file is not found, Emacs tries to fallback +on @file{~/.emacs.d/init_@var{shellname}.sh}. + + To specify a coding system for the shell, you can use the command +@kbd{C-x @key{RET} c} immediately before @kbd{M-x shell}. You can +also change the coding system for a running subshell by typing +@kbd{C-x @key{RET} p} in the shell buffer. @xref{Communication +Coding}. + +@cindex @env{INSIDE_EMACS} environment variable + Emacs sets the envitonment variable @env{INSIDE_EMACS} to @code{t} +in the subshell. Programs can check this variable to determine +whether they are running inside an Emacs subshell. + +@cindex @env{EMACS} environment variable + Emacs also sets the @env{EMACS} environment variable to @code{t} if +it is not already defined. @strong{Warning:} This environment +variable is deprecated. Programs that check this variable should be +changed to check @env{INSIDE_EMACS} instead. + +@node Shell Mode +@subsection Shell Mode +@cindex Shell mode +@cindex mode, Shell + + Shell buffers use Shell mode, which defines several special keys +attached to the @kbd{C-c} prefix. They are chosen to resemble the usual +editing and job control characters present in shells that are not under +Emacs, except that you must type @kbd{C-c} first. Here is a complete list +of the special key bindings of Shell mode: + +@table @kbd +@item @key{RET} +@kindex RET @r{(Shell mode)} +@findex comint-send-input +At end of buffer send line as input; otherwise, copy current line to +end of buffer and send it (@code{comint-send-input}). Copying a line +in this way omits any prompt at the beginning of the line (text output +by programs preceding your input). @xref{Shell Prompts}, for how +Shell mode recognizes prompts. + +@item @key{TAB} +@kindex TAB @r{(Shell mode)} +@findex comint-dynamic-complete +Complete the command name or file name before point in the shell buffer +(@code{comint-dynamic-complete}). @key{TAB} also completes history +references (@pxref{History References}) and environment variable names. + +@vindex shell-completion-fignore +@vindex comint-completion-fignore +The variable @code{shell-completion-fignore} specifies a list of file +name extensions to ignore in Shell mode completion. The default +setting is @code{nil}, but some users prefer @code{("~" "#" "%")} to +ignore file names ending in @samp{~}, @samp{#} or @samp{%}. Other +related Comint modes use the variable @code{comint-completion-fignore} +instead. + +@item M-? +@kindex M-? @r{(Shell mode)} +@findex comint-dynamic-list-filename@dots{} +Display temporarily a list of the possible completions of the file name +before point in the shell buffer +(@code{comint-dynamic-list-filename-completions}). + +@item C-d +@kindex C-d @r{(Shell mode)} +@findex comint-delchar-or-maybe-eof +Either delete a character or send @acronym{EOF} +(@code{comint-delchar-or-maybe-eof}). Typed at the end of the shell +buffer, @kbd{C-d} sends @acronym{EOF} to the subshell. Typed at any other +position in the buffer, @kbd{C-d} deletes a character as usual. + +@item C-c C-a +@kindex C-c C-a @r{(Shell mode)} +@findex comint-bol-or-process-mark +Move to the beginning of the line, but after the prompt if any +(@code{comint-bol-or-process-mark}). If you repeat this command twice +in a row, the second time it moves back to the process mark, which is +the beginning of the input that you have not yet sent to the subshell. +(Normally that is the same place---the end of the prompt on this +line---but after @kbd{C-c @key{SPC}} the process mark may be in a +previous line.) + +@item C-c @key{SPC} +Accumulate multiple lines of input, then send them together. This +command inserts a newline before point, but does not send the preceding +text as input to the subshell---at least, not yet. Both lines, the one +before this newline and the one after, will be sent together (along with +the newline that separates them), when you type @key{RET}. + +@item C-c C-u +@kindex C-c C-u @r{(Shell mode)} +@findex comint-kill-input +Kill all text pending at end of buffer to be sent as input +(@code{comint-kill-input}). If point is not at end of buffer, +this only kills the part of this text that precedes point. + +@item C-c C-w +@kindex C-c C-w @r{(Shell mode)} +Kill a word before point (@code{backward-kill-word}). + +@item C-c C-c +@kindex C-c C-c @r{(Shell mode)} +@findex comint-interrupt-subjob +Interrupt the shell or its current subjob if any +(@code{comint-interrupt-subjob}). This command also kills +any shell input pending in the shell buffer and not yet sent. + +@item C-c C-z +@kindex C-c C-z @r{(Shell mode)} +@findex comint-stop-subjob +Stop the shell or its current subjob if any (@code{comint-stop-subjob}). +This command also kills any shell input pending in the shell buffer and +not yet sent. + +@item C-c C-\ +@findex comint-quit-subjob +@kindex C-c C-\ @r{(Shell mode)} +Send quit signal to the shell or its current subjob if any +(@code{comint-quit-subjob}). This command also kills any shell input +pending in the shell buffer and not yet sent. + +@item C-c C-o +@kindex C-c C-o @r{(Shell mode)} +@findex comint-delete-output +Delete the last batch of output from a shell command +(@code{comint-delete-output}). This is useful if a shell command spews +out lots of output that just gets in the way. This command used to be +called @code{comint-kill-output}. + +@item C-c C-s +@kindex C-c C-s @r{(Shell mode)} +@findex comint-write-output +Write the last batch of output from a shell command to a file +(@code{comint-write-output}). With a prefix argument, the file is +appended to instead. Any prompt at the end of the output is not +written. + +@item C-c C-r +@itemx C-M-l +@kindex C-c C-r @r{(Shell mode)} +@kindex C-M-l @r{(Shell mode)} +@findex comint-show-output +Scroll to display the beginning of the last batch of output at the top +of the window; also move the cursor there (@code{comint-show-output}). + +@item C-c C-e +@kindex C-c C-e @r{(Shell mode)} +@findex comint-show-maximum-output +Scroll to put the end of the buffer at the bottom of the window +(@code{comint-show-maximum-output}). + +@item C-c C-f +@kindex C-c C-f @r{(Shell mode)} +@findex shell-forward-command +@vindex shell-command-regexp +Move forward across one shell command, but not beyond the current line +(@code{shell-forward-command}). The variable @code{shell-command-regexp} +specifies how to recognize the end of a command. + +@item C-c C-b +@kindex C-c C-b @r{(Shell mode)} +@findex shell-backward-command +Move backward across one shell command, but not beyond the current line +(@code{shell-backward-command}). + +@item M-x dirs +Ask the shell what its current directory is, so that Emacs can agree +with the shell. + +@item M-x send-invisible @key{RET} @var{text} @key{RET} +@findex send-invisible +Send @var{text} as input to the shell, after reading it without +echoing. This is useful when a shell command runs a program that asks +for a password. + +Please note that Emacs will not echo passwords by default. If you +really want them to be echoed, evaluate the following Lisp +expression: + +@example +(remove-hook 'comint-output-filter-functions + 'comint-watch-for-password-prompt) +@end example + +@item M-x comint-continue-subjob +@findex comint-continue-subjob +Continue the shell process. This is useful if you accidentally suspend +the shell process.@footnote{You should not suspend the shell process. +Suspending a subjob of the shell is a completely different matter---that +is normal practice, but you must use the shell to continue the subjob; +this command won't do it.} + +@item M-x comint-strip-ctrl-m +@findex comint-strip-ctrl-m +Discard all control-M characters from the current group of shell output. +The most convenient way to use this command is to make it run +automatically when you get output from the subshell. To do that, +evaluate this Lisp expression: + +@example +(add-hook 'comint-output-filter-functions + 'comint-strip-ctrl-m) +@end example + +@item M-x comint-truncate-buffer +@findex comint-truncate-buffer +This command truncates the shell buffer to a certain maximum number of +lines, specified by the variable @code{comint-buffer-maximum-size}. +Here's how to do this automatically each time you get output from the +subshell: + +@example +(add-hook 'comint-output-filter-functions + 'comint-truncate-buffer) +@end example +@end table + +@cindex Comint mode +@cindex mode, Comint + Shell mode is a derivative of Comint mode, a general-purpose mode for +communicating with interactive subprocesses. Most of the features of +Shell mode actually come from Comint mode, as you can see from the +command names listed above. The special features of Shell mode include +the directory tracking feature, and a few user commands. + + Other Emacs features that use variants of Comint mode include GUD +(@pxref{Debuggers}) and @kbd{M-x run-lisp} (@pxref{External Lisp}). + +@findex comint-run + You can use @kbd{M-x comint-run} to execute any program of your choice +in a subprocess using unmodified Comint mode---without the +specializations of Shell mode. + +@node Shell Prompts +@subsection Shell Prompts + +@vindex shell-prompt-pattern +@vindex comint-prompt-regexp +@vindex comint-use-prompt-regexp +@cindex prompt, shell + A prompt is text output by a program to show that it is ready to +accept new user input. Normally, Comint mode (and thus Shell mode) +considers the prompt to be any text output by a program at the +beginning of an input line. However, if the variable +@code{comint-use-prompt-regexp} is non-@code{nil}, then Comint mode +uses a regular expression to recognize prompts. In Shell mode, +@code{shell-prompt-pattern} specifies the regular expression. + + The value of @code{comint-use-prompt-regexp} also affects many +motion and paragraph commands. If the value is non-@code{nil}, the +general Emacs motion commands behave as they normally do in buffers +without special text properties. However, if the value is @code{nil}, +the default, then Comint mode divides the buffer into two types of +``fields'' (ranges of consecutive characters having the same +@code{field} text property): input and output. Prompts are part of +the output. Most Emacs motion commands do not cross field boundaries, +unless they move over multiple lines. For instance, when point is in +input on the same line as a prompt, @kbd{C-a} puts point at the +beginning of the input if @code{comint-use-prompt-regexp} is +@code{nil} and at the beginning of the line otherwise. + + In Shell mode, only shell prompts start new paragraphs. Thus, a +paragraph consists of a prompt and the input and output that follow +it. However, if @code{comint-use-prompt-regexp} is @code{nil}, the +default, most paragraph commands do not cross field boundaries. This +means that prompts, ranges of input, and ranges of non-prompt output +behave mostly like separate paragraphs; with this setting, numeric +arguments to most paragraph commands yield essentially undefined +behavior. For the purpose of finding paragraph boundaries, Shell mode +uses @code{shell-prompt-pattern}, regardless of +@code{comint-use-prompt-regexp}. + +@node Shell History +@subsection Shell Command History + + Shell buffers support three ways of repeating earlier commands. You +can use keys like those used for the minibuffer history; these work +much as they do in the minibuffer, inserting text from prior commands +while point remains always at the end of the buffer. You can move +through the buffer to previous inputs in their original place, then +resubmit them or copy them to the end. Or you can use a +@samp{!}-style history reference. + +@menu +* Ring: Shell Ring. Fetching commands from the history list. +* Copy: Shell History Copying. Moving to a command and then copying it. +* History References:: Expanding @samp{!}-style history references. +@end menu + +@node Shell Ring +@subsubsection Shell History Ring + +@table @kbd +@findex comint-previous-input +@kindex M-p @r{(Shell mode)} +@item M-p +@itemx C-@key{UP} +Fetch the next earlier old shell command. + +@kindex M-n @r{(Shell mode)} +@findex comint-next-input +@item M-n +@itemx C-@key{DOWN} +Fetch the next later old shell command. + +@kindex M-r @r{(Shell mode)} +@kindex M-s @r{(Shell mode)} +@findex comint-previous-matching-input +@findex comint-next-matching-input +@item M-r @var{regexp} @key{RET} +@itemx M-s @var{regexp} @key{RET} +Search backwards or forwards for old shell commands that match @var{regexp}. + +@item C-c C-x +@kindex C-c C-x @r{(Shell mode)} +@findex comint-get-next-from-history +Fetch the next subsequent command from the history. + +@item C-c . +@kindex C-c . @r{(Shell mode)} +@findex comint-input-previous-argument +Fetch one argument from an old shell command. + +@item C-c C-l +@kindex C-c C-l @r{(Shell mode)} +@findex comint-dynamic-list-input-ring +Display the buffer's history of shell commands in another window +(@code{comint-dynamic-list-input-ring}). +@end table + + Shell buffers provide a history of previously entered shell commands. To +reuse shell commands from the history, use the editing commands @kbd{M-p}, +@kbd{M-n}, @kbd{M-r} and @kbd{M-s}. These work just like the minibuffer +history commands except that they operate on the text at the end of the +shell buffer, where you would normally insert text to send to the shell. + + @kbd{M-p} fetches an earlier shell command to the end of the shell +buffer. Successive use of @kbd{M-p} fetches successively earlier +shell commands, each replacing any text that was already present as +potential shell input. @kbd{M-n} does likewise except that it finds +successively more recent shell commands from the buffer. +@kbd{C-@key{UP}} works like @kbd{M-p}, and @kbd{C-@key{DOWN}} like +@kbd{M-n}. + + The history search commands @kbd{M-r} and @kbd{M-s} read a regular +expression and search through the history for a matching command. Aside +from the choice of which command to fetch, they work just like @kbd{M-p} +and @kbd{M-n}. If you enter an empty regexp, these commands reuse the +same regexp used last time. + + When you find the previous input you want, you can resubmit it by +typing @key{RET}, or you can edit it first and then resubmit it if you +wish. Any partial input you were composing before navigating the +history list is restored when you go to the beginning or end of the +history ring. + + Often it is useful to reexecute several successive shell commands that +were previously executed in sequence. To do this, first find and +reexecute the first command of the sequence. Then type @kbd{C-c C-x}; +that will fetch the following command---the one that follows the command +you just repeated. Then type @key{RET} to reexecute this command. You +can reexecute several successive commands by typing @kbd{C-c C-x +@key{RET}} over and over. + + The command @kbd{C-c .}@: (@code{comint-input-previous-argument}) +copies an individual argument from a previous command, like @kbd{ESC +.} in Bash. The simplest use copies the last argument from the +previous shell command. With a prefix argument @var{n}, it copies the +@var{n}th argument instead. Repeating @kbd{C-c .} copies from an +earlier shell command instead, always using the same value of @var{n} +(don't give a prefix argument when you repeat the @kbd{C-c .} +command). + + These commands get the text of previous shell commands from a special +history list, not from the shell buffer itself. Thus, editing the shell +buffer, or even killing large parts of it, does not affect the history +that these commands access. + +@vindex shell-input-ring-file-name + Some shells store their command histories in files so that you can +refer to commands from previous shell sessions. Emacs reads +the command history file for your chosen shell, to initialize its own +command history. The file name is @file{~/.bash_history} for bash, +@file{~/.sh_history} for ksh, and @file{~/.history} for other shells. + +@node Shell History Copying +@subsubsection Shell History Copying + +@table @kbd +@kindex C-c C-p @r{(Shell mode)} +@findex comint-previous-prompt +@item C-c C-p +Move point to the previous prompt (@code{comint-previous-prompt}). + +@kindex C-c C-n @r{(Shell mode)} +@findex comint-next-prompt +@item C-c C-n +Move point to the following prompt (@code{comint-next-prompt}). + +@kindex C-c RET @r{(Shell mode)} +@findex comint-copy-old-input +@item C-c @key{RET} +Copy the input command which point is in, inserting the copy at the end +of the buffer (@code{comint-copy-old-input}). This is useful if you +move point back to a previous command. After you copy the command, you +can submit the copy as input with @key{RET}. If you wish, you can +edit the copy before resubmitting it. If you use this command on an +output line, it copies that line to the end of the buffer. + +@item Mouse-2 +If @code{comint-use-prompt-regexp} is @code{nil} (the default), copy +the old input command that you click on, inserting the copy at the end +of the buffer (@code{comint-insert-input}). If +@code{comint-use-prompt-regexp} is non-@code{nil}, or if the click is +not over old input, just yank as usual. +@end table + + Moving to a previous input and then copying it with @kbd{C-c +@key{RET}} or @kbd{Mouse-2} produces the same results---the same +buffer contents---that you would get by using @kbd{M-p} enough times +to fetch that previous input from the history list. However, @kbd{C-c +@key{RET}} copies the text from the buffer, which can be different +from what is in the history list if you edit the input text in the +buffer after it has been sent. + +@node History References +@subsubsection Shell History References +@cindex history reference + + Various shells including csh and bash support @dfn{history +references} that begin with @samp{!} and @samp{^}. Shell mode +recognizes these constructs, and can perform the history substitution +for you. + + If you insert a history reference and type @key{TAB}, this searches +the input history for a matching command, performs substitution if +necessary, and places the result in the buffer in place of the history +reference. For example, you can fetch the most recent command +beginning with @samp{mv} with @kbd{! m v @key{TAB}}. You can edit the +command if you wish, and then resubmit the command to the shell by +typing @key{RET}. + +@vindex comint-input-autoexpand +@findex comint-magic-space + Shell mode can optionally expand history references in the buffer +when you send them to the shell. To request this, set the variable +@code{comint-input-autoexpand} to @code{input}. You can make +@key{SPC} perform history expansion by binding @key{SPC} to the +command @code{comint-magic-space}. + + Shell mode recognizes history references when they follow a prompt. +@xref{Shell Prompts}, for how Shell mode recognizes prompts. + +@node Directory Tracking +@subsection Directory Tracking +@cindex directory tracking + +@vindex shell-pushd-regexp +@vindex shell-popd-regexp +@vindex shell-cd-regexp + Shell mode keeps track of @samp{cd}, @samp{pushd} and @samp{popd} +commands given to the inferior shell, so it can keep the +@samp{*shell*} buffer's default directory the same as the shell's +working directory. It recognizes these commands syntactically, by +examining lines of input that are sent. + + If you use aliases for these commands, you can tell Emacs to +recognize them also. For example, if the value of the variable +@code{shell-pushd-regexp} matches the beginning of a shell command +line, that line is regarded as a @code{pushd} command. Change this +variable when you add aliases for @samp{pushd}. Likewise, +@code{shell-popd-regexp} and @code{shell-cd-regexp} are used to +recognize commands with the meaning of @samp{popd} and @samp{cd}. +These commands are recognized only at the beginning of a shell command +line. + +@ignore @c This seems to have been deleted long ago. +@vindex shell-set-directory-error-hook + If Emacs gets an error while trying to handle what it believes is a +@samp{cd}, @samp{pushd} or @samp{popd} command, it runs the hook +@code{shell-set-directory-error-hook} (@pxref{Hooks}). +@end ignore + +@findex dirs + If Emacs gets confused about changes in the current directory of the +subshell, use the command @kbd{M-x dirs} to ask the shell what its +current directory is. This command works for shells that support the +most common command syntax; it may not work for unusual shells. + +@findex dirtrack-mode + You can also use @kbd{M-x dirtrack-mode} to enable (or disable) an +alternative and more aggressive method of tracking changes in the +current directory. + +@node Shell Options +@subsection Shell Mode Options + +@vindex comint-scroll-to-bottom-on-input + If the variable @code{comint-scroll-to-bottom-on-input} is +non-@code{nil}, insertion and yank commands scroll the selected window +to the bottom before inserting. The default is @code{nil}. + +@vindex comint-scroll-show-maximum-output + If @code{comint-scroll-show-maximum-output} is non-@code{nil}, then +arrival of output when point is at the end tries to scroll the last +line of text to the bottom line of the window, showing as much useful +text as possible. (This mimics the scrolling behavior of most +terminals.) The default is @code{t}. + +@vindex comint-move-point-for-output + By setting @code{comint-move-point-for-output}, you can opt for +having point jump to the end of the buffer whenever output arrives---no +matter where in the buffer point was before. If the value is +@code{this}, point jumps in the selected window. If the value is +@code{all}, point jumps in each window that shows the Comint buffer. If +the value is @code{other}, point jumps in all nonselected windows that +show the current buffer. The default value is @code{nil}, which means +point does not jump to the end. + +@vindex comint-prompt-read-only + If you set @code{comint-prompt-read-only}, the prompts in the Comint +buffer are read-only. + +@vindex comint-input-ignoredups + The variable @code{comint-input-ignoredups} controls whether successive +identical inputs are stored in the input history. A non-@code{nil} +value means to omit an input that is the same as the previous input. +The default is @code{nil}, which means to store each input even if it is +equal to the previous input. + +@vindex comint-completion-addsuffix +@vindex comint-completion-recexact +@vindex comint-completion-autolist + Three variables customize file name completion. The variable +@code{comint-completion-addsuffix} controls whether completion inserts a +space or a slash to indicate a fully completed file or directory name +(non-@code{nil} means do insert a space or slash). +@code{comint-completion-recexact}, if non-@code{nil}, directs @key{TAB} +to choose the shortest possible completion if the usual Emacs completion +algorithm cannot add even a single character. +@code{comint-completion-autolist}, if non-@code{nil}, says to list all +the possible completions whenever completion is not exact. + +@vindex shell-completion-execonly + Command completion normally considers only executable files. +If you set @code{shell-completion-execonly} to @code{nil}, +it considers nonexecutable files as well. + +@findex shell-pushd-tohome +@findex shell-pushd-dextract +@findex shell-pushd-dunique + You can configure the behavior of @samp{pushd}. Variables control +whether @samp{pushd} behaves like @samp{cd} if no argument is given +(@code{shell-pushd-tohome}), pop rather than rotate with a numeric +argument (@code{shell-pushd-dextract}), and only add directories to the +directory stack if they are not already on it +(@code{shell-pushd-dunique}). The values you choose should match the +underlying shell, of course. + + If you want Shell mode to handle color output from shell commands, +you can enable ANSI Color mode. Here is how to do this: + +@example +(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on) +@end example + +@node Terminal emulator +@subsection Emacs Terminal Emulator +@findex term + + To run a subshell in a terminal emulator, putting its typescript in +an Emacs buffer, use @kbd{M-x term}. This creates (or reuses) a +buffer named @samp{*terminal*}, and runs a subshell with input coming +from your keyboard, and output going to that buffer. + + The terminal emulator uses Term mode, which has two input modes. In +line mode, Term basically acts like Shell mode; see @ref{Shell Mode}. + + In char mode, each character is sent directly to the inferior +subshell, as ``terminal input.'' Any ``echoing'' of your input is the +responsibility of the subshell. The sole exception is the terminal +escape character, which by default is @kbd{C-c} (@pxref{Term Mode}). +Any ``terminal output'' from the subshell goes into the buffer, +advancing point. + + Some programs (such as Emacs itself) need to control the appearance +on the terminal screen in detail. They do this by sending special +control codes. The exact control codes needed vary from terminal to +terminal, but nowadays most terminals and terminal emulators +(including @code{xterm}) understand the ANSI-standard (VT100-style) +escape sequences. Term mode recognizes these escape sequences, and +handles each one appropriately, changing the buffer so that the +appearance of the window matches what it would be on a real terminal. +You can actually run Emacs inside an Emacs Term window. + + The file name used to load the subshell is determined the same way +as for Shell mode. To make multiple terminal emulators, rename the +buffer @samp{*terminal*} to something different using @kbd{M-x +rename-uniquely}, just as with Shell mode. + + Unlike Shell mode, Term mode does not track the current directory by +examining your input. But some shells can tell Term what the current +directory is. This is done automatically by @code{bash} version 1.15 +and later. + +@node Term Mode +@subsection Term Mode +@cindex Term mode +@cindex mode, Term + + The terminal emulator uses Term mode, which has two input modes. In +line mode, Term basically acts like Shell mode; see @ref{Shell Mode}. +In char mode, each character is sent directly to the inferior +subshell, except for the Term escape character, normally @kbd{C-c}. + + To switch between line and char mode, use these commands: + +@table @kbd +@kindex C-c C-j @r{(Term mode)} +@findex term-char-mode +@item C-c C-j +Switch to line mode. Do nothing if already in line mode. + +@kindex C-c C-k @r{(Term mode)} +@findex term-line-mode +@item C-c C-k +Switch to char mode. Do nothing if already in char mode. +@end table + + The following commands are only available in char mode: + +@table @kbd +@item C-c C-c +Send a literal @key{C-c} to the sub-shell. + +@item C-c @var{char} +This is equivalent to @kbd{C-x @var{char}} in normal Emacs. For +example, @kbd{C-c o} invokes the global binding of @kbd{C-x o}, which +is normally @samp{other-window}. +@end table + +@node Paging in Term +@subsection Page-At-A-Time Output +@cindex page-at-a-time + + Term mode has a page-at-a-time feature. When enabled it makes +output pause at the end of each screenful. + +@table @kbd +@kindex C-c C-q @r{(Term mode)} +@findex term-pager-toggle +@item C-c C-q +Toggle the page-at-a-time feature. This command works in both line +and char modes. When page-at-a-time is enabled, the mode-line +displays the word @samp{page}. +@end table + + With page-at-a-time enabled, whenever Term receives more than a +screenful of output since your last input, it pauses, displaying +@samp{**MORE**} in the mode-line. Type @key{SPC} to display the next +screenful of output. Type @kbd{?} to see your other options. The +interface is similar to the @code{more} program. + +@node Remote Host +@subsection Remote Host Shell +@cindex remote host +@cindex connecting to remote host +@cindex Telnet +@cindex Rlogin + + You can login to a remote computer, using whatever commands you +would from a regular terminal (e.g.@: using the @code{telnet} or +@code{rlogin} commands), from a Term window. + + A program that asks you for a password will normally suppress +echoing of the password, so the password will not show up in the +buffer. This will happen just as if you were using a real terminal, +if the buffer is in char mode. If it is in line mode, the password is +temporarily visible, but will be erased when you hit return. (This +happens automatically; there is no special password processing.) + + When you log in to a different machine, you need to specify the type +of terminal you're using, by setting the @env{TERM} environment +variable in the environment for the remote login command. (If you use +bash, you do that by writing the variable assignment before the remote +login command, without separating comma.) Terminal types @samp{ansi} +or @samp{vt100} will work on most systems. + +@c If you are talking to a Bourne-compatible +@c shell, and your system understands the @env{TERMCAP} variable, +@c you can use the command @kbd{M-x shell-send-termcap}, which +@c sends a string specifying the terminal type and size. +@c (This command is also useful after the window has changed size.) + +@c You can of course run @samp{gdb} on that remote computer. One useful +@c trick: If you invoke gdb with the @code{--fullname} option, +@c it will send special commands to Emacs that will cause Emacs to +@c pop up the source files you're debugging. This will work +@c whether or not gdb is running on a different computer than Emacs, +@c as long as Emacs can access the source files specified by gdb. + +@ignore + You cannot log in to a remote computer using the Shell mode. +@c (This will change when Shell is re-written to use Term.) +Instead, Emacs provides two commands for logging in to another computer +and communicating with it through an Emacs buffer using Comint mode: + +@table @kbd +@item M-x telnet @key{RET} @var{hostname} @key{RET} +Set up a Telnet connection to the computer named @var{hostname}. +@item M-x rlogin @key{RET} @var{hostname} @key{RET} +Set up an Rlogin connection to the computer named @var{hostname}. +@end table + +@findex telnet + Use @kbd{M-x telnet} to set up a Telnet connection to another +computer. (Telnet is the standard Internet protocol for remote login.) +It reads the host name of the other computer as an argument with the +minibuffer. Once the connection is established, talking to the other +computer works like talking to a subshell: you can edit input with the +usual Emacs commands, and send it a line at a time by typing @key{RET}. +The output is inserted in the Telnet buffer interspersed with the input. + +@findex rlogin +@vindex rlogin-explicit-args + Use @kbd{M-x rlogin} to set up an Rlogin connection. Rlogin is +another remote login communication protocol, essentially much like the +Telnet protocol but incompatible with it, and supported only by certain +systems. Rlogin's advantages are that you can arrange not to have to +give your user name and password when communicating between two machines +you frequently use, and that you can make an 8-bit-clean connection. +(To do that in Emacs, set @code{rlogin-explicit-args} to @code{("-8")} +before you run Rlogin.) + + @kbd{M-x rlogin} sets up the default file directory of the Emacs +buffer to access the remote host via FTP (@pxref{File Names}), and it +tracks the shell commands that change the current directory, just like +Shell mode. + +@findex rlogin-directory-tracking-mode + There are two ways of doing directory tracking in an Rlogin +buffer---either with remote directory names +@file{/@var{host}:@var{dir}/} or with local names (that works if the +``remote'' machine shares file systems with your machine of origin). +You can use the command @code{rlogin-directory-tracking-mode} to switch +modes. No argument means use remote directory names, a positive +argument means use local names, and a negative argument means turn +off directory tracking. + +@end ignore + +@node Emacs Server, Printing, Shell, Top +@section Using Emacs as a Server +@pindex emacsclient +@cindex Emacs as a server +@cindex server, using Emacs as +@cindex @env{EDITOR} environment variable + + Various programs such as @code{mail} can invoke your choice of editor +to edit a particular piece of text, such as a message that you are +sending. By convention, most of these programs use the environment +variable @env{EDITOR} to specify which editor to run. If you set +@env{EDITOR} to @samp{emacs}, they invoke Emacs---but in an +inconvenient fashion, by starting a new, separate Emacs process. This +is inconvenient because it takes time and because the new Emacs process +doesn't share the buffers with any existing Emacs process. + + You can arrange to use your existing Emacs process as the editor for +programs like @code{mail} by using the Emacs client program and the +server that is part of Emacs. Here is how. + +@cindex @env{TEXEDIT} environment variable +@findex server-start + First, the preparations. Within Emacs, call the function +@code{server-start}. (Your @file{.emacs} init file can do this +automatically if you add the expression @code{(server-start)} to it, +see @ref{Init File}.) Then, outside Emacs, set the @env{EDITOR} +environment variable to @samp{emacsclient}. (Note that some programs +use a different environment variable; for example, to make @TeX{} use +@samp{emacsclient}, you should set the @env{TEXEDIT} environment +variable to @samp{emacsclient +%d %s}.) + +@pindex emacs.bash +@cindex Bash command to use Emacs server + As an alternative to using @code{emacsclient}, the file +@file{etc/emacs.bash} defines a Bash command @code{edit} which will +communicate with a running Emacs session, or start one if none exist. + +@kindex C-x # +@findex server-edit + Now, whenever any program invokes your specified @env{EDITOR} +program, the effect is to send a message to your principal Emacs telling +it to visit a file. (That's what the program @code{emacsclient} does.) +Emacs displays the buffer immediately and you can immediately begin +editing it in the already running Emacs session. + + When you've finished editing that buffer, type @kbd{C-x #} +(@code{server-edit}). This saves the file and sends a message back to +the @code{emacsclient} program telling it to exit. The programs that +use @env{EDITOR} wait for the ``editor'' (actually, @code{emacsclient}) +to exit. @kbd{C-x #} also checks for other pending external requests +to edit various files, and selects the next such file. + + You can switch to a server buffer manually if you wish; you don't +have to arrive at it with @kbd{C-x #}. But @kbd{C-x #} is the way to +say that you are finished with one. + +@vindex server-kill-new-buffers +@vindex server-temp-file-regexp + Finishing with a server buffer also kills the buffer, unless it +already existed in the Emacs session before the server asked to create +it. However, if you set @code{server-kill-new-buffers} to @code{nil}, +then a different criterion is used: finishing with a server buffer +kills it if the file name matches the regular expression +@code{server-temp-file-regexp}. This is set up to distinguish certain +``temporary'' files. + +@vindex server-window + If you set the variable @code{server-window} to a window or a frame, +@kbd{C-x #} displays the server buffer in that window or in that frame. + +@vindex server-name + You can run multiple Emacs servers on the same machine by giving +each one a unique ``server name'', using the variable +@code{server-name}. For example, @kbd{M-x set-variable @key{RET} +server-name @key{RET} foo @key{RET}} sets the server name to +@samp{foo}. The @code{emacsclient} program can specify a server by +name using the @samp{-s} option. @xref{Invoking emacsclient}. + + While @code{mail} or another application is waiting for +@code{emacsclient} to finish, @code{emacsclient} does not read terminal +input. So the terminal that @code{mail} was using is effectively +blocked for the duration. In order to edit with your principal Emacs, +you need to be able to use it without using that terminal. There are +three ways to do this: + +@itemize @bullet +@item +Using a window system, run @code{mail} and the principal Emacs in two +separate windows. While @code{mail} is waiting for @code{emacsclient}, +the window where it was running is blocked, but you can use Emacs by +switching windows. + +@item +Using virtual terminals, run @code{mail} in one virtual terminal +and run Emacs in another. + +@item +Use Shell mode or Term mode in Emacs to run the other program such as +@code{mail}; then, @code{emacsclient} blocks only the subshell under +Emacs, and you can still use Emacs to edit the file. +@end itemize + + If you run @code{emacsclient} with the option @samp{--no-wait}, it +returns immediately without waiting for you to ``finish'' the buffer +in Emacs. Note that server buffers created in this way are not killed +automatically when you finish with them. + +@menu +* Invoking emacsclient:: Emacs client startup options. +@end menu + +@node Invoking emacsclient,, Emacs Server, Emacs Server +@subsection Invoking @code{emacsclient} +@cindex @code{emacsclient} invocation and options + + To run the @code{emacsclient} program, specify file names as arguments, +and optionally line numbers as well, like this: + +@example +emacsclient @r{@{}@r{[}+@var{line}@r{[}@var{column}@r{]}@r{]} @var{filename}@r{@}}@dots{} +@end example + +@noindent +This tells Emacs to visit each of the specified files; if you specify a +line number for a certain file, Emacs moves to that line in the file. +If you specify a column number as well, Emacs puts point on that column +in the line. + + Ordinarily, @code{emacsclient} does not return until you use the +@kbd{C-x #} command on each of these buffers. When that happens, +Emacs sends a message to the @code{emacsclient} program telling it to +return. + + If you invoke @code{emacsclient} for more than one file, the +additional client buffers are buried at the bottom of the buffer list +(@pxref{Buffers}). If you call @kbd{C-x #} after you are done editing +a client buffer, the next client buffer is automatically selected. + + But if you use the option @samp{-n} or @samp{--no-wait} when running +@code{emacsclient}, then it returns immediately. (You can take as +long as you like to edit the files in Emacs.) + + The option @samp{-a @var{command}} or +@samp{--alternate-editor=@var{command}} specifies a command to run if +@code{emacsclient} fails to contact Emacs. This is useful when +running @code{emacsclient} in a script. For example, the following +setting for the @env{EDITOR} environment variable will always give you +an editor, even if no Emacs server is running: + +@example +EDITOR="emacsclient --alternate-editor emacs +%d %s" +@end example + +@noindent +@cindex @env{ALTERNATE_EDITOR} environment variable +The environment variable @env{ALTERNATE_EDITOR} has the same effect, with +the value of the @samp{--alternate-editor} option taking precedence. + +If you use several displays, you can tell Emacs on which display to +open the given files with the @samp{-d @var{display}} or +@samp{--display=@var{display}} option to @code{emacsclient}. This is +handy when connecting from home to an Emacs session running on your +machine at your workplace. + +If there is more than one Emacs server running, you can specify a +server name with the @samp{-s @var{name}} or +@samp{--socket-name=@var{name}} option to @code{emacsclient}. (This +option is not supported on MS-Windows.) + +You can also use @code{emacsclient} to execute any piece of Emacs Lisp +code, using the @samp{-e} or @samp{--eval} option. When this option +is given, the rest of the arguments is interpreted as a list of +expressions to evaluate, not a list of files to visit. + +@cindex @env{EMACS_SERVER_FILE} environment variable +When you start the Emacs server (by calling @code{server-start}), +Emacs creates a file with information about TCP connection to the +server: the host where Emacs is running, the port where it is +listening, and an authentication string. @code{emacsclient} uses this +information if it needs to connect to the server via TCP. By default, +the file goes in the @file{~/.emacs.d/server/} directory@footnote{On +MS-Windows, if @env{HOME} is not set or the TCP configuration file +cannot be found there, Emacs also looks for the file in the +@file{.emacs.d/server/} subdirectory of the directory pointed to by +the @env{APPDATA} environment variable.}. You can specify the file +name to use with the @samp{-f @var{file}} or +@samp{--server-file=@var{file}} options, or by setting +@env{EMACS_SERVER_FILE} environment variable to the file name. + +@node Printing, Sorting, Emacs Server, Top +@section Printing Hard Copies +@cindex hardcopy +@cindex printing + + Emacs provides commands for printing hard copies of either an entire +buffer or just part of one, with or without page headers. You can +invoke the printing commands directly, as detailed in the following +section, or using the @samp{File} menu on the menu bar. See also the +hardcopy commands of Dired (@pxref{Misc File Ops}) and the diary +(@pxref{Displaying the Diary}). + +@table @kbd +@item M-x print-buffer +Print hardcopy of current buffer with page headings containing the file +name and page number. +@item M-x lpr-buffer +Print hardcopy of current buffer without page headings. +@item M-x print-region +Like @code{print-buffer} but print only the current region. +@item M-x lpr-region +Like @code{lpr-buffer} but print only the current region. +@end table + +@findex print-buffer +@findex print-region +@findex lpr-buffer +@findex lpr-region +@vindex lpr-switches + The hardcopy commands (aside from the PostScript commands) pass extra +switches to the @code{lpr} program based on the value of the variable +@code{lpr-switches}. Its value should be a list of strings, each string +an option starting with @samp{-}. For example, to specify a line width +of 80 columns for all the printing you do in Emacs, set +@code{lpr-switches} like this: + +@example +(setq lpr-switches '("-w80")) +@end example + +@vindex printer-name + You can specify the printer to use by setting the variable +@code{printer-name}. + +@vindex lpr-headers-switches +@vindex lpr-commands +@vindex lpr-add-switches + The variable @code{lpr-command} specifies the name of the printer +program to run; the default value depends on your operating system type. +On most systems, the default is @code{"lpr"}. The variable +@code{lpr-headers-switches} similarly specifies the extra switches to +use to make page headers. The variable @code{lpr-add-switches} controls +whether to supply @samp{-T} and @samp{-J} options (suitable for +@code{lpr}) to the printer program: @code{nil} means don't add them. +@code{lpr-add-switches} should be @code{nil} if your printer program is +not compatible with @code{lpr}. + +@menu +* PostScript:: Printing buffers or regions as PostScript. +* PostScript Variables:: Customizing the PostScript printing commands. +* Printing Package:: An optional advanced printing interface. +@end menu + +@node PostScript, PostScript Variables,, Printing +@section PostScript Hardcopy + + These commands convert buffer contents to PostScript, +either printing it or leaving it in another Emacs buffer. + +@table @kbd +@item M-x ps-print-buffer +Print hardcopy of the current buffer in PostScript form. +@item M-x ps-print-region +Print hardcopy of the current region in PostScript form. +@item M-x ps-print-buffer-with-faces +Print hardcopy of the current buffer in PostScript form, showing the +faces used in the text by means of PostScript features. +@item M-x ps-print-region-with-faces +Print hardcopy of the current region in PostScript form, showing the +faces used in the text. +@item M-x ps-spool-buffer +Generate PostScript for the current buffer text. +@item M-x ps-spool-region +Generate PostScript for the current region. +@item M-x ps-spool-buffer-with-faces +Generate PostScript for the current buffer, showing the faces used. +@item M-x ps-spool-region-with-faces +Generate PostScript for the current region, showing the faces used. +@item M-x handwrite +Generates/prints PostScript for the current buffer as if handwritten. +@end table + +@findex ps-print-region +@findex ps-print-buffer +@findex ps-print-region-with-faces +@findex ps-print-buffer-with-faces + The PostScript commands, @code{ps-print-buffer} and +@code{ps-print-region}, print buffer contents in PostScript form. One +command prints the entire buffer; the other, just the region. The +corresponding @samp{-with-faces} commands, +@code{ps-print-buffer-with-faces} and @code{ps-print-region-with-faces}, +use PostScript features to show the faces (fonts and colors) in the text +properties of the text being printed. + + If you are using a color display, you can print a buffer of program +code with color highlighting by turning on Font-Lock mode in that +buffer, and using @code{ps-print-buffer-with-faces}. + +@findex ps-spool-region +@findex ps-spool-buffer +@findex ps-spool-region-with-faces +@findex ps-spool-buffer-with-faces + The commands whose names have @samp{spool} instead of @samp{print} +generate the PostScript output in an Emacs buffer instead of sending +it to the printer. + +@findex handwrite +@cindex handwriting +@kbd{M-x handwrite} is more frivolous. It generates a PostScript +rendition of the current buffer as a cursive handwritten document. It +can be customized in group @code{handwrite}. This function only +supports ISO 8859-1 characters. + +@ifnottex + The following section describes variables for customizing these commands. +@end ifnottex + +@node PostScript Variables, Printing Package, PostScript, Printing +@section Variables for PostScript Hardcopy + +@vindex ps-lpr-command +@vindex ps-lpr-switches +@vindex ps-printer-name + All the PostScript hardcopy commands use the variables +@code{ps-lpr-command} and @code{ps-lpr-switches} to specify how to print +the output. @code{ps-lpr-command} specifies the command name to run, +@code{ps-lpr-switches} specifies command line options to use, and +@code{ps-printer-name} specifies the printer. If you don't set the +first two variables yourself, they take their initial values from +@code{lpr-command} and @code{lpr-switches}. If @code{ps-printer-name} +is @code{nil}, @code{printer-name} is used. + +@vindex ps-print-header + The variable @code{ps-print-header} controls whether these commands +add header lines to each page---set it to @code{nil} to turn headers +off. + +@cindex color emulation on black-and-white printers +@vindex ps-print-color-p + If your printer doesn't support colors, you should turn off color +processing by setting @code{ps-print-color-p} to @code{nil}. By +default, if the display supports colors, Emacs produces hardcopy output +with color information; on black-and-white printers, colors are emulated +with shades of gray. This might produce illegible output, even if your +screen colors only use shades of gray. + +@vindex ps-use-face-background + By default, PostScript printing ignores the background colors of the +faces, unless the variable @code{ps-use-face-background} is +non-@code{nil}. This is to avoid unwanted interference with the zebra +stripes and background image/text. + +@vindex ps-paper-type +@vindex ps-page-dimensions-database + The variable @code{ps-paper-type} specifies which size of paper to +format for; legitimate values include @code{a4}, @code{a3}, +@code{a4small}, @code{b4}, @code{b5}, @code{executive}, @code{ledger}, +@code{legal}, @code{letter}, @code{letter-small}, @code{statement}, +@code{tabloid}. The default is @code{letter}. You can define +additional paper sizes by changing the variable +@code{ps-page-dimensions-database}. + +@vindex ps-landscape-mode + The variable @code{ps-landscape-mode} specifies the orientation of +printing on the page. The default is @code{nil}, which stands for +``portrait'' mode. Any non-@code{nil} value specifies ``landscape'' +mode. + +@vindex ps-number-of-columns + The variable @code{ps-number-of-columns} specifies the number of +columns; it takes effect in both landscape and portrait mode. The +default is 1. + +@vindex ps-font-family +@vindex ps-font-size +@vindex ps-font-info-database + The variable @code{ps-font-family} specifies which font family to use +for printing ordinary text. Legitimate values include @code{Courier}, +@code{Helvetica}, @code{NewCenturySchlbk}, @code{Palatino} and +@code{Times}. The variable @code{ps-font-size} specifies the size of +the font for ordinary text. It defaults to 8.5 points. + +@vindex ps-multibyte-buffer +@cindex Intlfonts for PostScript printing +@cindex fonts for PostScript printing + Emacs supports more scripts and characters than a typical PostScript +printer. Thus, some of the characters in your buffer might not be +printable using the fonts built into your printer. You can augment +the fonts supplied with the printer with those from the GNU Intlfonts +package, or you can instruct Emacs to use Intlfonts exclusively. The +variable @code{ps-multibyte-buffer} controls this: the default value, +@code{nil}, is appropriate for printing @acronym{ASCII} and Latin-1 +characters; a value of @code{non-latin-printer} is for printers which +have the fonts for @acronym{ASCII}, Latin-1, Japanese, and Korean +characters built into them. A value of @code{bdf-font} arranges for +the BDF fonts from the Intlfonts package to be used for @emph{all} +characters. Finally, a value of @code{bdf-font-except-latin} +instructs the printer to use built-in fonts for @acronym{ASCII} and Latin-1 +characters, and Intlfonts BDF fonts for the rest. + +@vindex bdf-directory-list + To be able to use the BDF fonts, Emacs needs to know where to find +them. The variable @code{bdf-directory-list} holds the list of +directories where Emacs should look for the fonts; the default value +includes a single directory @file{/usr/local/share/emacs/fonts/bdf}. + + Many other customization variables for these commands are defined and +described in the Lisp files @file{ps-print.el} and @file{ps-mule.el}. + +@node Printing Package,, PostScript Variables, Printing +@section Printing Package +@cindex Printing package + + The basic Emacs facilities for printing hardcopy can be extended +using the Printing package. This provides an easy-to-use interface +for choosing what to print, previewing PostScript files before +printing, and setting various printing options such as print headers, +landscape or portrait modes, duplex modes, and so forth. On GNU/Linux +or Unix systems, the Printing package relies on the @file{gs} and +@file{gv} utilities, which are distributed as part of the GhostScript +program. On MS-Windows, the @file{gstools} port of Ghostscript can be +used. + +@findex pr-interface + To use the Printing package, add @code{(require 'printing)} to your +init file (@pxref{Init File}), followed by @code{(pr-update-menus)}. +This function replaces the usual printing commands in the menu bar +with a @samp{Printing} submenu that contains various printing options. +You can also type @kbd{M-x pr-interface RET}; this creates a +@samp{*Printing Interface*} buffer, similar to a customization buffer, +where you can set the printing options. After selecting what and how +to print, you start the print job using the @samp{Print} button (click +@kbd{mouse-2} on it, or move point over it and type @kbd{RET}). For +further information on the various options, use the @samp{Interface +Help} button. + +@node Sorting, Narrowing, Printing, Top +@section Sorting Text +@cindex sorting + + Emacs provides several commands for sorting text in the buffer. All +operate on the contents of the region. +They divide the text of the region into many @dfn{sort records}, +identify a @dfn{sort key} for each record, and then reorder the records +into the order determined by the sort keys. The records are ordered so +that their keys are in alphabetical order, or, for numeric sorting, in +numeric order. In alphabetic sorting, all upper-case letters `A' through +`Z' come before lower-case `a', in accord with the @acronym{ASCII} character +sequence. + + The various sort commands differ in how they divide the text into sort +records and in which part of each record is used as the sort key. Most of +the commands make each line a separate sort record, but some commands use +paragraphs or pages as sort records. Most of the sort commands use each +entire sort record as its own sort key, but some use only a portion of the +record as the sort key. + +@findex sort-lines +@findex sort-paragraphs +@findex sort-pages +@findex sort-fields +@findex sort-numeric-fields +@vindex sort-numeric-base +@table @kbd +@item M-x sort-lines +Divide the region into lines, and sort by comparing the entire +text of a line. A numeric argument means sort into descending order. + +@item M-x sort-paragraphs +Divide the region into paragraphs, and sort by comparing the entire +text of a paragraph (except for leading blank lines). A numeric +argument means sort into descending order. + +@item M-x sort-pages +Divide the region into pages, and sort by comparing the entire +text of a page (except for leading blank lines). A numeric +argument means sort into descending order. + +@item M-x sort-fields +Divide the region into lines, and sort by comparing the contents of +one field in each line. Fields are defined as separated by +whitespace, so the first run of consecutive non-whitespace characters +in a line constitutes field 1, the second such run constitutes field +2, etc. + +Specify which field to sort by with a numeric argument: 1 to sort by +field 1, etc. A negative argument means count fields from the right +instead of from the left; thus, minus 1 means sort by the last field. +If several lines have identical contents in the field being sorted, they +keep the same relative order that they had in the original buffer. + +@item M-x sort-numeric-fields +Like @kbd{M-x sort-fields} except the specified field is converted +to an integer for each line, and the numbers are compared. @samp{10} +comes before @samp{2} when considered as text, but after it when +considered as a number. By default, numbers are interpreted according +to @code{sort-numeric-base}, but numbers beginning with @samp{0x} or +@samp{0} are interpreted as hexadecimal and octal, respectively. + +@item M-x sort-columns +Like @kbd{M-x sort-fields} except that the text within each line +used for comparison comes from a fixed range of columns. See below +for an explanation. + +@item M-x reverse-region +Reverse the order of the lines in the region. This is useful for +sorting into descending order by fields or columns, since those sort +commands do not have a feature for doing that. +@end table + + For example, if the buffer contains this: + +@smallexample +On systems where clash detection (locking of files being edited) is +implemented, Emacs also checks the first time you modify a buffer +whether the file has changed on disk since it was last visited or +saved. If it has, you are asked to confirm that you want to change +the buffer. +@end smallexample + +@noindent +applying @kbd{M-x sort-lines} to the entire buffer produces this: + +@smallexample +On systems where clash detection (locking of files being edited) is +implemented, Emacs also checks the first time you modify a buffer +saved. If it has, you are asked to confirm that you want to change +the buffer. +whether the file has changed on disk since it was last visited or +@end smallexample + +@noindent +where the upper-case @samp{O} sorts before all lower-case letters. If +you use @kbd{C-u 2 M-x sort-fields} instead, you get this: + +@smallexample +implemented, Emacs also checks the first time you modify a buffer +saved. If it has, you are asked to confirm that you want to change +the buffer. +On systems where clash detection (locking of files being edited) is +whether the file has changed on disk since it was last visited or +@end smallexample + +@noindent +where the sort keys were @samp{Emacs}, @samp{If}, @samp{buffer}, +@samp{systems} and @samp{the}. + +@findex sort-columns + @kbd{M-x sort-columns} requires more explanation. You specify the +columns by putting point at one of the columns and the mark at the other +column. Because this means you cannot put point or the mark at the +beginning of the first line of the text you want to sort, this command +uses an unusual definition of ``region'': all of the line point is in is +considered part of the region, and so is all of the line the mark is in, +as well as all the lines in between. + + For example, to sort a table by information found in columns 10 to 15, +you could put the mark on column 10 in the first line of the table, and +point on column 15 in the last line of the table, and then run +@code{sort-columns}. Equivalently, you could run it with the mark on +column 15 in the first line and point on column 10 in the last line. + + This can be thought of as sorting the rectangle specified by point and +the mark, except that the text on each line to the left or right of the +rectangle moves along with the text inside the rectangle. +@xref{Rectangles}. + +@vindex sort-fold-case + Many of the sort commands ignore case differences when comparing, if +@code{sort-fold-case} is non-@code{nil}. + +@node Narrowing, Two-Column, Sorting, Top +@section Narrowing +@cindex widening +@cindex restriction +@cindex narrowing +@cindex accessible portion + + @dfn{Narrowing} means focusing in on some portion of the buffer, +making the rest temporarily inaccessible. The portion which you can +still get to is called the @dfn{accessible portion}. Canceling the +narrowing, which makes the entire buffer once again accessible, is +called @dfn{widening}. The bounds of narrowing in effect in a buffer +are called the buffer's @dfn{restriction}. + + Narrowing can make it easier to concentrate on a single subroutine or +paragraph by eliminating clutter. It can also be used to limit the +range of operation of a replace command or repeating keyboard macro. + +@table @kbd +@item C-x n n +Narrow down to between point and mark (@code{narrow-to-region}). +@item C-x n w +Widen to make the entire buffer accessible again (@code{widen}). +@item C-x n p +Narrow down to the current page (@code{narrow-to-page}). +@item C-x n d +Narrow down to the current defun (@code{narrow-to-defun}). +@end table + + When you have narrowed down to a part of the buffer, that part appears +to be all there is. You can't see the rest, you can't move into it +(motion commands won't go outside the accessible part), you can't change +it in any way. However, it is not gone, and if you save the file all +the inaccessible text will be saved. The word @samp{Narrow} appears in +the mode line whenever narrowing is in effect. + +@kindex C-x n n +@findex narrow-to-region + The primary narrowing command is @kbd{C-x n n} (@code{narrow-to-region}). +It sets the current buffer's restrictions so that the text in the current +region remains accessible, but all text before the region or after the +region is inaccessible. Point and mark do not change. + +@kindex C-x n p +@findex narrow-to-page +@kindex C-x n d +@findex narrow-to-defun + Alternatively, use @kbd{C-x n p} (@code{narrow-to-page}) to narrow +down to the current page. @xref{Pages}, for the definition of a page. +@kbd{C-x n d} (@code{narrow-to-defun}) narrows down to the defun +containing point (@pxref{Defuns}). + +@kindex C-x n w +@findex widen + The way to cancel narrowing is to widen with @kbd{C-x n w} +(@code{widen}). This makes all text in the buffer accessible again. + + You can get information on what part of the buffer you are narrowed down +to using the @kbd{C-x =} command. @xref{Position Info}. + + Because narrowing can easily confuse users who do not understand it, +@code{narrow-to-region} is normally a disabled command. Attempting to use +this command asks for confirmation and gives you the option of enabling it; +if you enable the command, confirmation will no longer be required for +it. @xref{Disabling}. + +@node Two-Column, Editing Binary Files, Narrowing, Top +@section Two-Column Editing +@cindex two-column editing +@cindex splitting columns +@cindex columns, splitting + + Two-column mode lets you conveniently edit two side-by-side columns of +text. It uses two side-by-side windows, each showing its own +buffer. + + There are three ways to enter two-column mode: + +@table @asis +@item @kbd{@key{F2} 2} or @kbd{C-x 6 2} +@kindex F2 2 +@kindex C-x 6 2 +@findex 2C-two-columns +Enter two-column mode with the current buffer on the left, and on the +right, a buffer whose name is based on the current buffer's name +(@code{2C-two-columns}). If the right-hand buffer doesn't already +exist, it starts out empty; the current buffer's contents are not +changed. + +This command is appropriate when the current buffer is empty or contains +just one column and you want to add another column. + +@item @kbd{@key{F2} s} or @kbd{C-x 6 s} +@kindex F2 s +@kindex C-x 6 s +@findex 2C-split +Split the current buffer, which contains two-column text, into two +buffers, and display them side by side (@code{2C-split}). The current +buffer becomes the left-hand buffer, but the text in the right-hand +column is moved into the right-hand buffer. The current column +specifies the split point. Splitting starts with the current line and +continues to the end of the buffer. + +This command is appropriate when you have a buffer that already contains +two-column text, and you wish to separate the columns temporarily. + +@item @kbd{@key{F2} b @var{buffer} @key{RET}} +@itemx @kbd{C-x 6 b @var{buffer} @key{RET}} +@kindex F2 b +@kindex C-x 6 b +@findex 2C-associate-buffer +Enter two-column mode using the current buffer as the left-hand buffer, +and using buffer @var{buffer} as the right-hand buffer +(@code{2C-associate-buffer}). +@end table + + @kbd{@key{F2} s} or @kbd{C-x 6 s} looks for a column separator, which +is a string that appears on each line between the two columns. You can +specify the width of the separator with a numeric argument to +@kbd{@key{F2} s}; that many characters, before point, constitute the +separator string. By default, the width is 1, so the column separator +is the character before point. + + When a line has the separator at the proper place, @kbd{@key{F2} s} +puts the text after the separator into the right-hand buffer, and +deletes the separator. Lines that don't have the column separator at +the proper place remain unsplit; they stay in the left-hand buffer, and +the right-hand buffer gets an empty line to correspond. (This is the +way to write a line that ``spans both columns while in two-column +mode'': write it in the left-hand buffer, and put an empty line in the +right-hand buffer.) + +@kindex F2 RET +@kindex C-x 6 RET +@findex 2C-newline + The command @kbd{C-x 6 @key{RET}} or @kbd{@key{F2} @key{RET}} +(@code{2C-newline}) inserts a newline in each of the two buffers at +corresponding positions. This is the easiest way to add a new line to +the two-column text while editing it in split buffers. + +@kindex F2 1 +@kindex C-x 6 1 +@findex 2C-merge + When you have edited both buffers as you wish, merge them with +@kbd{@key{F2} 1} or @kbd{C-x 6 1} (@code{2C-merge}). This copies the +text from the right-hand buffer as a second column in the other buffer. +To go back to two-column editing, use @kbd{@key{F2} s}. + +@kindex F2 d +@kindex C-x 6 d +@findex 2C-dissociate + Use @kbd{@key{F2} d} or @kbd{C-x 6 d} to dissociate the two buffers, +leaving each as it stands (@code{2C-dissociate}). If the other buffer, +the one not current when you type @kbd{@key{F2} d}, is empty, +@kbd{@key{F2} d} kills it. + +@node Editing Binary Files, Saving Emacs Sessions, Two-Column, Top +@section Editing Binary Files + +@cindex Hexl mode +@cindex mode, Hexl +@cindex editing binary files +@cindex hex editing + There is a special major mode for editing binary files: Hexl mode. To +use it, use @kbd{M-x hexl-find-file} instead of @kbd{C-x C-f} to visit +the file. This command converts the file's contents to hexadecimal and +lets you edit the translation. When you save the file, it is converted +automatically back to binary. + + You can also use @kbd{M-x hexl-mode} to translate an existing buffer +into hex. This is useful if you visit a file normally and then discover +it is a binary file. + + Ordinary text characters overwrite in Hexl mode. This is to reduce +the risk of accidentally spoiling the alignment of data in the file. +There are special commands for insertion. Here is a list of the +commands of Hexl mode: + +@c I don't think individual index entries for these commands are useful--RMS. +@table @kbd +@item C-M-d +Insert a byte with a code typed in decimal. + +@item C-M-o +Insert a byte with a code typed in octal. + +@item C-M-x +Insert a byte with a code typed in hex. + +@item C-x [ +Move to the beginning of a 1k-byte ``page.'' + +@item C-x ] +Move to the end of a 1k-byte ``page.'' + +@item M-g +Move to an address specified in hex. + +@item M-j +Move to an address specified in decimal. + +@item C-c C-c +Leave Hexl mode, going back to the major mode this buffer had before you +invoked @code{hexl-mode}. +@end table + +@noindent +Other Hexl commands let you insert strings (sequences) of binary +bytes, move by @code{short}s or @code{int}s, etc.; type @kbd{C-h a +hexl-@key{RET}} for details. + + +@node Saving Emacs Sessions, Recursive Edit, Editing Binary Files, Top +@section Saving Emacs Sessions +@cindex saving sessions +@cindex restore session +@cindex remember editing session +@cindex reload files +@cindex desktop + + Use the desktop library to save the state of Emacs from one session +to another. Once you save the Emacs @dfn{desktop}---the buffers, +their file names, major modes, buffer positions, and so on---then +subsequent Emacs sessions reload the saved desktop. + +@findex desktop-save +@vindex desktop-save-mode + You can save the desktop manually with the command @kbd{M-x +desktop-save}. You can also enable automatic saving of the desktop +when you exit Emacs, and automatic restoration of the last saved +desktop when Emacs starts: use the Customization buffer (@pxref{Easy +Customization}) to set @code{desktop-save-mode} to @code{t} for future +sessions, or add this line in your @file{~/.emacs} file: + +@example +(desktop-save-mode 1) +@end example + +@findex desktop-change-dir +@findex desktop-revert + If you turn on @code{desktop-save-mode} in your @file{~/.emacs}, +then when Emacs starts, it looks for a saved desktop in the current +directory. Thus, you can have separate saved desktops in different +directories, and the starting directory determines which one Emacs +reloads. You can save the current desktop and reload one saved in +another directory by typing @kbd{M-x desktop-change-dir}. Typing +@kbd{M-x desktop-revert} reverts to the desktop previously reloaded. + + Specify the option @samp{--no-desktop} on the command line when you +don't want it to reload any saved desktop. This turns off +@code{desktop-save-mode} for the current session. Starting Emacs with +the @samp{--no-init-file} option also disables desktop reloading, +since it bypasses the @file{.emacs} init file, where +@code{desktop-save-mode} is usually turned on. + +@vindex desktop-restore-eager + By default, all the buffers in the desktop are restored at one go. +However, this may be slow if there are a lot of buffers in the +desktop. You can specify the maximum number of buffers to restore +immediately with the variable @code{desktop-restore-eager}; the +remaining buffers are restored ``lazily,'' when Emacs is idle. + +@findex desktop-clear +@vindex desktop-globals-to-clear +@vindex desktop-clear-preserve-buffers-regexp + Type @kbd{M-x desktop-clear} to empty the Emacs desktop. This kills +all buffers except for internal ones, and clears the global variables +listed in @code{desktop-globals-to-clear}. If you want this to +preserve certain buffers, customize the variable +@code{desktop-clear-preserve-buffers-regexp}, whose value is a regular +expression matching the names of buffers not to kill. + + If you want to save minibuffer history from one session to +another, use the @code{savehist} library. + +@node Recursive Edit, Emulation, Saving Emacs Sessions, Top +@section Recursive Editing Levels +@cindex recursive editing level +@cindex editing level, recursive + + A @dfn{recursive edit} is a situation in which you are using Emacs +commands to perform arbitrary editing while in the middle of another +Emacs command. For example, when you type @kbd{C-r} inside of a +@code{query-replace}, you enter a recursive edit in which you can change +the current buffer. On exiting from the recursive edit, you go back to +the @code{query-replace}. + +@kindex C-M-c +@findex exit-recursive-edit +@cindex exiting recursive edit + @dfn{Exiting} the recursive edit means returning to the unfinished +command, which continues execution. The command to exit is @kbd{C-M-c} +(@code{exit-recursive-edit}). + + You can also @dfn{abort} the recursive edit. This is like exiting, +but also quits the unfinished command immediately. Use the command +@kbd{C-]} (@code{abort-recursive-edit}) to do this. @xref{Quitting}. + + The mode line shows you when you are in a recursive edit by displaying +square brackets around the parentheses that always surround the major and +minor mode names. Every window's mode line shows this in the same way, +since being in a recursive edit is true of Emacs as a whole rather than +any particular window or buffer. + + It is possible to be in recursive edits within recursive edits. For +example, after typing @kbd{C-r} in a @code{query-replace}, you may type a +command that enters the debugger. This begins a recursive editing level +for the debugger, within the recursive editing level for @kbd{C-r}. +Mode lines display a pair of square brackets for each recursive editing +level currently in progress. + + Exiting the inner recursive edit (such as with the debugger @kbd{c} +command) resumes the command running in the next level up. When that +command finishes, you can then use @kbd{C-M-c} to exit another recursive +editing level, and so on. Exiting applies to the innermost level only. +Aborting also gets out of only one level of recursive edit; it returns +immediately to the command level of the previous recursive edit. If you +wish, you can then abort the next recursive editing level. + + Alternatively, the command @kbd{M-x top-level} aborts all levels of +recursive edits, returning immediately to the top-level command reader. + + The text being edited inside the recursive edit need not be the same text +that you were editing at top level. It depends on what the recursive edit +is for. If the command that invokes the recursive edit selects a different +buffer first, that is the buffer you will edit recursively. In any case, +you can switch buffers within the recursive edit in the normal manner (as +long as the buffer-switching keys have not been rebound). You could +probably do all the rest of your editing inside the recursive edit, +visiting files and all. But this could have surprising effects (such as +stack overflow) from time to time. So remember to exit or abort the +recursive edit when you no longer need it. + + In general, we try to minimize the use of recursive editing levels in +GNU Emacs. This is because they constrain you to ``go back'' in a +particular order---from the innermost level toward the top level. When +possible, we present different activities in separate buffers so that +you can switch between them as you please. Some commands switch to a +new major mode which provides a command to switch back. These +approaches give you more flexibility to go back to unfinished tasks in +the order you choose. + +@node Emulation, Hyperlinking, Recursive Edit, Top +@section Emulation +@cindex emulating other editors +@cindex other editors +@cindex EDT +@cindex vi +@cindex PC key bindings +@cindex scrolling all windows +@cindex PC selection +@cindex Motif key bindings +@cindex Macintosh key bindings +@cindex WordStar + + GNU Emacs can be programmed to emulate (more or less) most other +editors. Standard facilities can emulate these: + +@table @asis +@item CRiSP/Brief (PC editor) +@findex crisp-mode +@vindex crisp-override-meta-x +@findex scroll-all-mode +@cindex CRiSP mode +@cindex Brief emulation +@cindex emulation of Brief +@cindex mode, CRiSP +You can turn on key bindings to emulate the CRiSP/Brief editor with +@kbd{M-x crisp-mode}. Note that this rebinds @kbd{M-x} to exit Emacs +unless you set the variable @code{crisp-override-meta-x}. You can +also use the command @kbd{M-x scroll-all-mode} or set the variable +@code{crisp-load-scroll-all} to emulate CRiSP's scroll-all feature +(scrolling all windows together). + +@item EDT (DEC VMS editor) +@findex edt-emulation-on +@findex edt-emulation-off +Turn on EDT emulation with the command @kbd{M-x edt-emulation-on}, +while @kbd{M-x edt-emulation-off} restores normal Emacs command +bindings. + +Most of the EDT emulation commands are keypad keys, and most standard +Emacs key bindings are still available. The EDT emulation rebindings +are done in the global keymap, so there is no problem switching +buffers or major modes while in EDT emulation. + +@item TPU (DEC VMS editor) +@findex tpu-edt-on +@cindex TPU +@kbd{M-x tpu-edt-on} turns on emulation of the TPU editor emulating EDT. + +@item vi (Berkeley editor) +@findex viper-mode +Viper is the newest emulator for vi. It implements several levels of +emulation; level 1 is closest to vi itself, while level 5 departs +somewhat from strict emulation to take advantage of the capabilities of +Emacs. To invoke Viper, type @kbd{M-x viper-mode}; it will guide you +the rest of the way and ask for the emulation level. @inforef{Top, +Viper, viper}. + +@item vi (another emulator) +@findex vi-mode +@kbd{M-x vi-mode} enters a major mode that replaces the previously +established major mode. All of the vi commands that, in real vi, enter +``input'' mode are programmed instead to return to the previous major +mode. Thus, ordinary Emacs serves as vi's ``input'' mode. + +Because vi emulation works through major modes, it does not work +to switch buffers during emulation. Return to normal Emacs first. + +If you plan to use vi emulation much, you probably want to bind a key +to the @code{vi-mode} command. + +@item vi (alternate emulator) +@findex vip-mode +@kbd{M-x vip-mode} invokes another vi emulator, said to resemble real vi +more thoroughly than @kbd{M-x vi-mode}. ``Input'' mode in this emulator +is changed from ordinary Emacs so you can use @key{ESC} to go back to +emulated vi command mode. To get from emulated vi command mode back to +ordinary Emacs, type @kbd{C-z}. + +This emulation does not work through major modes, and it is possible +to switch buffers in various ways within the emulator. It is not +so necessary to assign a key to the command @code{vip-mode} as +it is with @code{vi-mode} because terminating insert mode does +not use it. + +@inforef{Top, VIP, vip}, for full information. + +@item WordStar (old wordprocessor) +@findex wordstar-mode +@kbd{M-x wordstar-mode} provides a major mode with WordStar-like +key bindings. +@end table + +@node Hyperlinking, Dissociated Press, Emulation, Top +@section Hyperlinking and Navigation Features + +@cindex hyperlinking +@cindex navigation + Various modes documented elsewhere have hypertext features so that +you can follow links, usually by clicking @kbd{Mouse-2} on the link or +typing @key{RET} while point is on the link. Clicking @kbd{Mouse-1} +quickly on the link also follows it. (Hold @kbd{Mouse-1} for longer +if you want to set point instead.) + + Info mode, Help mode and the Dired-like modes are examples of modes +that have links in the buffer. The Tags facility links between uses +and definitions in source files, see @ref{Tags}. Imenu provides +navigation amongst items indexed in the current buffer, see +@ref{Imenu}. Info-lookup provides mode-specific lookup of definitions +in Info indexes, see @ref{Documentation}. Speedbar maintains a frame +in which links to files, and locations in files are displayed, see +@ref{Speedbar}. + + Other non-mode-specific facilities described in this section enable +following links from the current buffer in a context-sensitive +fashion. + +@menu +* Browse-URL:: Following URLs. +* Goto-address:: Activating URLs. +* FFAP:: Finding files etc. at point. +@end menu + +@node Browse-URL +@subsection Following URLs +@cindex World Wide Web +@cindex Web +@findex browse-url +@findex browse-url-at-point +@findex browse-url-at-mouse +@cindex Browse-URL +@cindex URLs + +@table @kbd +@item M-x browse-url @key{RET} @var{url} @key{RET} +Load a URL into a Web browser. +@end table + +The Browse-URL package provides facilities for following URLs specifying +links on the World Wide Web. Usually this works by invoking a web +browser, but you can, for instance, arrange to invoke @code{compose-mail} +from @samp{mailto:} URLs. + + The general way to use this feature is to type @kbd{M-x browse-url}, +which displays a specified URL. If point is located near a plausible +URL, that URL is used as the default. Other commands are available +which you might like to bind to keys, such as +@code{browse-url-at-point} and @code{browse-url-at-mouse}. + +@vindex browse-url-browser-function + You can customize Browse-URL's behavior via various options in the +@code{browse-url} Customize group, particularly +@code{browse-url-browser-function}. You can invoke actions dependent +on the type of URL by defining @code{browse-url-browser-function} as +an association list. The package's commentary available via @kbd{C-h +p} under the @samp{hypermedia} keyword provides more information. +Packages with facilities for following URLs should always go through +Browse-URL, so that the customization options for Browse-URL will +affect all browsing in Emacs. + +@node Goto-address +@subsection Activating URLs +@findex goto-address +@cindex Goto-address +@cindex URLs, activating + +@table @kbd +@item M-x goto-address +Activate URLs and e-mail addresses in the current buffer. +@end table + + You can make URLs in the current buffer active with @kbd{M-x +goto-address}. This finds all the URLs in the buffer, and establishes +bindings for @kbd{Mouse-2} and @kbd{C-c @key{RET}} on them. After +activation, if you click on a URL with @kbd{Mouse-2}, or move to a URL +and type @kbd{C-c @key{RET}}, that will display the web page that the URL +specifies. For a @samp{mailto} URL, it sends mail instead, using your +selected mail-composition method (@pxref{Mail Methods}). + + It can be useful to add @code{goto-address} to mode hooks and the +hooks used to display an incoming message. +@code{rmail-show-message-hook} is the appropriate hook for Rmail, and +@code{mh-show-mode-hook} for MH-E. This is not needed for Gnus, +which has a similar feature of its own. + + +@node FFAP +@subsection Finding Files and URLs at Point +@findex find-file-at-point +@findex ffap +@findex dired-at-point +@findex ffap-next +@findex ffap-menu +@cindex finding file at point + + FFAP mode replaces certain key bindings for finding files, including +@kbd{C-x C-f}, with commands that provide more sensitive defaults. +These commands behave like the ordinary ones when given a prefix +argument. Otherwise, they get the default file name or URL from the +text around point. If what is found in the buffer has the form of a +URL rather than a file name, the commands use @code{browse-url} to +view it. + + This feature is useful for following references in mail or news +buffers, @file{README} files, @file{MANIFEST} files, and so on. The +@samp{ffap} package's commentary available via @kbd{C-h p} under the +@samp{files} keyword and the @code{ffap} Custom group provide details. + +@cindex FFAP minor mode +@findex ffap-mode + You can turn on FFAP minor mode by calling @code{ffap-bindings} to +make the following key bindings and to install hooks for using +@code{ffap} in Rmail, Gnus and VM article buffers. + +@table @kbd +@item C-x C-f @var{filename} @key{RET} +@kindex C-x C-f @r{(FFAP)} +Find @var{filename}, guessing a default from text around point +(@code{find-file-at-point}). +@item C-x C-r +@kindex C-x C-r @r{(FFAP)} +@code{ffap-read-only}, analogous to @code{find-file-read-only}. +@item C-x C-v +@kindex C-x C-v @r{(FFAP)} +@code{ffap-alternate-file}, analogous to @code{find-alternate-file}. +@item C-x d @var{directory} @key{RET} +@kindex C-x d @r{(FFAP)} +Start Dired on @var{directory}, defaulting to the directory name at +point (@code{dired-at-point}). +@item C-x C-d +@code{ffap-list-directory}, analogous to @code{list-directory}. +@item C-x 4 f +@kindex C-x 4 f @r{(FFAP)} +@code{ffap-other-window}, analogous to @code{find-file-other-window}. +@item C-x 4 r +@code{ffap-read-only-other-window}, analogous to +@code{find-file-read-only-other-window}. +@item C-x 4 d +@code{ffap-dired-other-window}, analogous to @code{dired-other-window}. +@item C-x 5 f +@kindex C-x 5 f @r{(FFAP)} +@code{ffap-other-frame}, analogous to @code{find-file-other-frame}. +@item C-x 5 r +@code{ffap-read-only-other-frame}, analogous to +@code{find-file-read-only-other-frame}. +@item C-x 5 d +@code{ffap-dired-other-frame}, analogous to @code{dired-other-frame}. +@item M-x ffap-next +Search buffer for next file name or URL, then find that file or URL. +@item S-Mouse-3 +@kindex S-Mouse-3 @r{(FFAP)} +@code{ffap-at-mouse} finds the file guessed from text around the position +of a mouse click. +@item C-S-Mouse-3 +@kindex C-S-Mouse-3 @r{(FFAP)} +Display a menu of files and URLs mentioned in current buffer, then +find the one you select (@code{ffap-menu}). +@end table + +@node Dissociated Press, Amusements, Hyperlinking, Top +@section Dissociated Press + +@findex dissociated-press + @kbd{M-x dissociated-press} is a command for scrambling a file of text +either word by word or character by character. Starting from a buffer of +straight English, it produces extremely amusing output. The input comes +from the current Emacs buffer. Dissociated Press writes its output in a +buffer named @samp{*Dissociation*}, and redisplays that buffer after every +couple of lines (approximately) so you can read the output as it comes out. + + Dissociated Press asks every so often whether to continue generating +output. Answer @kbd{n} to stop it. You can also stop at any time by +typing @kbd{C-g}. The dissociation output remains in the +@samp{*Dissociation*} buffer for you to copy elsewhere if you wish. + +@cindex presidentagon + Dissociated Press operates by jumping at random from one point in the +buffer to another. In order to produce plausible output rather than +gibberish, it insists on a certain amount of overlap between the end of +one run of consecutive words or characters and the start of the next. +That is, if it has just output `president' and then decides to jump +to a different point in the file, it might spot the `ent' in `pentagon' +and continue from there, producing `presidentagon'.@footnote{This +dissociword actually appeared during the Vietnam War, when it was very +appropriate. Bush has made it appropriate again.} Long sample texts +produce the best results. + +@cindex againformation + A positive argument to @kbd{M-x dissociated-press} tells it to operate +character by character, and specifies the number of overlap characters. A +negative argument tells it to operate word by word, and specifies the number +of overlap words. In this mode, whole words are treated as the elements to +be permuted, rather than characters. No argument is equivalent to an +argument of two. For your againformation, the output goes only into the +buffer @samp{*Dissociation*}. The buffer you start with is not changed. + +@cindex Markov chain +@cindex ignoriginal +@cindex techniquitous + Dissociated Press produces results fairly like those of a Markov +chain based on a frequency table constructed from the sample text. It +is, however, an independent, ignoriginal invention. Dissociated Press +techniquitously copies several consecutive characters from the sample +between random choices, whereas a Markov chain would choose randomly +for each word or character. This makes for more plausible sounding +results, and runs faster. + +@cindex outragedy +@cindex buggestion +@cindex properbose +@cindex mustatement +@cindex developediment +@cindex userenced + It is a mustatement that too much use of Dissociated Press can be a +developediment to your real work, sometimes to the point of outragedy. +And keep dissociwords out of your documentation, if you want it to be well +userenced and properbose. Have fun. Your buggestions are welcome. + +@node Amusements, Customization, Dissociated Press, Top +@section Other Amusements +@cindex boredom +@findex hanoi +@findex yow +@findex gomoku +@cindex tower of Hanoi + + If you are a little bit bored, you can try @kbd{M-x hanoi}. If you are +considerably bored, give it a numeric argument. If you are very, very +bored, try an argument of 9. Sit back and watch. + +@cindex Go Moku + If you want a little more personal involvement, try @kbd{M-x gomoku}, +which plays the game Go Moku with you. + +@findex blackbox +@findex mpuz +@findex 5x5 +@cindex puzzles + @kbd{M-x blackbox}, @kbd{M-x mpuz} and @kbd{M-x 5x5} are puzzles. +@code{blackbox} challenges you to determine the location of objects +inside a box by tomography. @code{mpuz} displays a multiplication +puzzle with letters standing for digits in a code that you must +guess---to guess a value, type a letter and then the digit you think it +stands for. The aim of @code{5x5} is to fill in all the squares. + +@findex decipher +@cindex ciphers +@cindex cryptanalysis +@kbd{M-x decipher} helps you to cryptanalyze a buffer which is encrypted +in a simple monoalphabetic substitution cipher. + +@findex dunnet + @kbd{M-x dunnet} runs an adventure-style exploration game, which is +a bigger sort of puzzle. + +@findex lm +@cindex landmark game +@kbd{M-x lm} runs a relatively non-participatory game in which a robot +attempts to maneuver towards a tree at the center of the window based on +unique olfactory cues from each of the four directions. + +@findex life +@cindex Life +@kbd{M-x life} runs Conway's ``Life'' cellular automaton. + +@findex morse-region +@findex unmorse-region +@cindex Morse code +@cindex --/---/.-./.../. +@kbd{M-x morse-region} converts text in a region to Morse code and +@kbd{M-x unmorse-region} converts it back. No cause for remorse. + +@findex pong +@cindex Pong game +@kbd{M-x pong} plays a Pong-like game, bouncing the ball off opposing +bats. + +@findex solitaire +@cindex solitaire +@kbd{M-x solitaire} plays a game of solitaire in which you jump pegs +across other pegs. + +@findex studlify-region +@cindex StudlyCaps +@kbd{M-x studlify-region} studlify-cases the region, producing +text like this: + +@example +M-x stUdlIfY-RegioN stUdlIfY-CaSeS thE region. +@end example + +@findex tetris +@cindex Tetris +@findex snake +@cindex Snake +@kbd{M-x tetris} runs an implementation of the well-known Tetris game. +Likewise, @kbd{M-x snake} provides an implementation of Snake. + + When you are frustrated, try the famous Eliza program. Just do +@kbd{M-x doctor}. End each input by typing @key{RET} twice. + +@cindex Zippy + When you are feeling strange, type @kbd{M-x yow}. + +@findex zone +The command @kbd{M-x zone} plays games with the display when Emacs is +idle. + +@ifnottex +@lowersections +@end ifnottex + +@ignore + arch-tag: 8f094220-c0d5-4e9e-af7d-3e0da8187474 +@end ignore diff --git a/doc/emacs/msdog-xtra.texi b/doc/emacs/msdog-xtra.texi new file mode 100644 index 00000000000..432f28888f6 --- /dev/null +++ b/doc/emacs/msdog-xtra.texi @@ -0,0 +1,687 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@c +@c This file is included either in emacs-xtra.texi (when producing the +@c printed version) or in the main Emacs manual (for the on-line version). +@node MS-DOS +@section Emacs and MS-DOS +@cindex MS-DOG +@cindex MS-DOS peculiarities + + This section briefly describes the peculiarities of using Emacs on +the MS-DOS ``operating system'' (also known as ``MS-DOG''). +@iftex +Information about Emacs and Microsoft's current operating system +Windows (also known as ``Losedows) is in the main Emacs manual +(@pxref{Microsoft Systems,,, emacs, the Emacs Manual}). +@end iftex +@ifnottex +Information about peculiarities common to MS-DOS and Microsoft's +current operating systems Windows (also known as ``Losedows) is in +@ref{Microsoft Windows}. +@end ifnottex + + If you build Emacs for MS-DOS, the binary will also run on Windows +3.X, Windows NT, Windows 9X/ME, Windows 2000/XP, or OS/2 as a DOS +application; all of this chapter applies for all of those systems, if +you use an Emacs that was built for MS-DOS. + +@iftex + @xref{Text and Binary,,,emacs, the Emacs Manual}, for information +@end iftex +@ifnottex + @xref{Text and Binary}, for information +@end ifnottex +about Emacs' special handling of text files under MS-DOS (and Windows). + +@menu +* Keyboard: MS-DOS Keyboard. Keyboard conventions on MS-DOS. +* Mouse: MS-DOS Mouse. Mouse conventions on MS-DOS. +* Display: MS-DOS Display. Fonts, frames and display size on MS-DOS. +* Files: MS-DOS File Names. File name conventions on MS-DOS. +* Printing: MS-DOS Printing. Printing specifics on MS-DOS. +* I18N: MS-DOS and MULE. Support for internationalization on MS-DOS. +* Processes: MS-DOS Processes. Running subprocesses on MS-DOS. +@end menu + +@node MS-DOS Keyboard +@subsection Keyboard Usage on MS-DOS + +@kindex DEL @r{(MS-DOS)} +@kindex BS @r{(MS-DOS)} + The key that is called @key{DEL} in Emacs (because that's how it is +designated on most workstations) is known as @key{BS} (backspace) on a +PC. That is why the PC-specific terminal initialization remaps the +@key{BS} key to act as @key{DEL}; the @key{DELETE} key is remapped to act +as @kbd{C-d} for the same reasons. + +@kindex C-g @r{(MS-DOS)} +@kindex C-BREAK @r{(MS-DOS)} +@cindex quitting on MS-DOS + Emacs built for MS-DOS recognizes @kbd{C-@key{BREAK}} as a quit +character, just like @kbd{C-g}. This is because Emacs cannot detect +that you have typed @kbd{C-g} until it is ready for more input. As a +consequence, you cannot use @kbd{C-g} to stop a running command +@iftex +(@pxref{Quitting,,,emacs, the Emacs Manual}). +@end iftex +@ifnottex +(@pxref{Quitting}). +@end ifnottex +By contrast, @kbd{C-@key{BREAK}} @emph{is} detected as soon as you +type it (as @kbd{C-g} is on other systems), so it can be used to stop +a running command and for emergency escape +@iftex +(@pxref{Emergency Escape,,,emacs, the Emacs Manual}). +@end iftex +@ifnottex +(@pxref{Emergency Escape}). +@end ifnottex + +@cindex Meta (under MS-DOS) +@cindex Hyper (under MS-DOS) +@cindex Super (under MS-DOS) +@vindex dos-super-key +@vindex dos-hyper-key + The PC keyboard maps use the left @key{ALT} key as the @key{META} key. +You have two choices for emulating the @key{SUPER} and @key{HYPER} keys: +choose either the right @key{CTRL} key or the right @key{ALT} key by +setting the variables @code{dos-hyper-key} and @code{dos-super-key} to 1 +or 2 respectively. If neither @code{dos-super-key} nor +@code{dos-hyper-key} is 1, then by default the right @key{ALT} key is +also mapped to the @key{META} key. However, if the MS-DOS international +keyboard support program @file{KEYB.COM} is installed, Emacs will +@emph{not} map the right @key{ALT} to @key{META}, since it is used for +accessing characters like @kbd{~} and @kbd{@@} on non-US keyboard +layouts; in this case, you may only use the left @key{ALT} as @key{META} +key. + +@kindex C-j @r{(MS-DOS)} +@vindex dos-keypad-mode + The variable @code{dos-keypad-mode} is a flag variable that controls +what key codes are returned by keys in the numeric keypad. You can also +define the keypad @key{ENTER} key to act like @kbd{C-j}, by putting the +following line into your @file{_emacs} file: + +@smallexample +;; @r{Make the @key{ENTER} key from the numeric keypad act as @kbd{C-j}.} +(define-key function-key-map [kp-enter] [?\C-j]) +@end smallexample + +@node MS-DOS Mouse +@subsection Mouse Usage on MS-DOS + +@cindex mouse support under MS-DOS + Emacs on MS-DOS supports a mouse (on the default terminal only). +The mouse commands work as documented, including those that use menus +and the menu bar +@iftex +(@pxref{Menu Bar,,,emacs, the Emacs Manual}). +@end iftex +@ifnottex +(@pxref{Menu Bar}). +@end ifnottex + Scroll bars don't work in MS-DOS Emacs. PC mice usually have only +two buttons; these act as @kbd{Mouse-1} and @kbd{Mouse-2}, but if you +press both of them together, that has the effect of @kbd{Mouse-3}. If +the mouse does have 3 buttons, Emacs detects that at startup, and all +the 3 buttons function normally, as on X. + + Help strings for menu-bar and pop-up menus are displayed in the echo +area when the mouse pointer moves across the menu items. Highlighting +of mouse-sensitive text +@iftex +(@pxref{Mouse References,,,emacs, the Emacs Manual}) +@end iftex +@ifnottex +(@pxref{Mouse References}) +@end ifnottex +is also supported. + +@cindex mouse, set number of buttons +@findex msdos-set-mouse-buttons + Some versions of mouse drivers don't report the number of mouse +buttons correctly. For example, mice with a wheel report that they +have 3 buttons, but only 2 of them are passed to Emacs; the clicks on +the wheel, which serves as the middle button, are not passed. In +these cases, you can use the @kbd{M-x msdos-set-mouse-buttons} command +to tell Emacs how many mouse buttons to expect. You could make such a +setting permanent by adding this fragment to your @file{_emacs} init +file: + +@example +;; @r{Treat the mouse like a 2-button mouse.} +(msdos-set-mouse-buttons 2) +@end example + +@cindex Windows clipboard support + Emacs built for MS-DOS supports clipboard operations when it runs on +Windows. Commands that put text on the kill ring, or yank text from +the ring, check the Windows clipboard first, just as Emacs does on the +X Window System +@iftex +(@pxref{Mouse Commands,,,emacs, the Emacs Manual}). +@end iftex +@ifnottex +(@pxref{Mouse Commands}). +@end ifnottex +Only the primary selection and the cut buffer are supported by MS-DOS +Emacs on Windows; the secondary selection always appears as empty. + + Due to the way clipboard access is implemented by Windows, the +length of text you can put into the clipboard is limited by the amount +of free DOS memory that is available to Emacs. Usually, up to 620KB of +text can be put into the clipboard, but this limit depends on the system +configuration and is lower if you run Emacs as a subprocess of +another program. If the killed text does not fit, Emacs outputs a +message saying so, and does not put the text into the clipboard. + + Null characters also cannot be put into the Windows clipboard. If the +killed text includes null characters, Emacs does not put such text into +the clipboard, and displays in the echo area a message to that effect. + +@vindex dos-display-scancodes + The variable @code{dos-display-scancodes}, when non-@code{nil}, +directs Emacs to display the @acronym{ASCII} value and the keyboard scan code of +each keystroke; this feature serves as a complement to the +@code{view-lossage} command, for debugging. + +@node MS-DOS Display +@subsection Display on MS-DOS +@cindex faces under MS-DOS +@cindex fonts, emulating under MS-DOS + + Display on MS-DOS cannot use font variants, like bold or italic, but +it does support multiple faces, each of which can specify a foreground +and a background color. Therefore, you can get the full functionality +of Emacs packages that use fonts (such as @code{font-lock}, Enriched +Text mode, and others) by defining the relevant faces to use different +colors. Use the @code{list-colors-display} command +@iftex +(@pxref{Frame Parameters,,,emacs, the Emacs Manual}) +@end iftex +@ifnottex +(@pxref{Frame Parameters}) +@end ifnottex +and the @code{list-faces-display} command +@iftex +(@pxref{Faces,,,emacs, the Emacs Manual}) +@end iftex +@ifnottex +(@pxref{Faces}) +@end ifnottex +to see what colors and faces are available and what they look like. + + @xref{MS-DOS and MULE}, later in this chapter, for information on +how Emacs displays glyphs and characters that aren't supported by the +native font built into the DOS display. + +@cindex cursor shape on MS-DOS + When Emacs starts, it changes the cursor shape to a solid box. This +is for compatibility with other systems, where the box cursor is the +default in Emacs. This default shape can be changed to a bar by +specifying the @code{cursor-type} parameter in the variable +@code{default-frame-alist} +@iftex +(@pxref{Creating Frames,,,emacs, the Emacs Manual}). +@end iftex +@ifnottex +(@pxref{Creating Frames}). +@end ifnottex +The MS-DOS terminal doesn't support a vertical-bar cursor, +so the bar cursor is horizontal, and the @code{@var{width}} parameter, +if specified by the frame parameters, actually determines its height. +For this reason, the @code{bar} and @code{hbar} cursor types produce +the same effect on MS-DOS. As an extension, the bar cursor +specification can include the starting scan line of the cursor as well +as its width, like this: + +@example + '(cursor-type bar @var{width} . @var{start}) +@end example + +@noindent +In addition, if the @var{width} parameter is negative, the cursor bar +begins at the top of the character cell. + +@cindex frames on MS-DOS + The MS-DOS terminal can only display a single frame at a time. The +Emacs frame facilities work on MS-DOS much as they do on text-only +terminals +@iftex +(@pxref{Frames,,,emacs, the Emacs Manual}). +@end iftex +@ifnottex +(@pxref{Frames}). +@end ifnottex +When you run Emacs from a DOS window on MS-Windows, you can make the +visible frame smaller than the full screen, but Emacs still cannot +display more than a single frame at a time. + +@cindex frame size under MS-DOS +@findex mode4350 +@findex mode25 + The @code{mode4350} command switches the display to 43 or 50 +lines, depending on your hardware; the @code{mode25} command switches +to the default 80x25 screen size. + + By default, Emacs only knows how to set screen sizes of 80 columns by +25, 28, 35, 40, 43 or 50 rows. However, if your video adapter has +special video modes that will switch the display to other sizes, you can +have Emacs support those too. When you ask Emacs to switch the frame to +@var{n} rows by @var{m} columns dimensions, it checks if there is a +variable called @code{screen-dimensions-@var{n}x@var{m}}, and if so, +uses its value (which must be an integer) as the video mode to switch +to. (Emacs switches to that video mode by calling the BIOS @code{Set +Video Mode} function with the value of +@code{screen-dimensions-@var{n}x@var{m}} in the @code{AL} register.) +For example, suppose your adapter will switch to 66x80 dimensions when +put into video mode 85. Then you can make Emacs support this screen +size by putting the following into your @file{_emacs} file: + +@example +(setq screen-dimensions-66x80 85) +@end example + + Since Emacs on MS-DOS can only set the frame size to specific +supported dimensions, it cannot honor every possible frame resizing +request. When an unsupported size is requested, Emacs chooses the next +larger supported size beyond the specified size. For example, if you +ask for 36x80 frame, you will get 40x80 instead. + + The variables @code{screen-dimensions-@var{n}x@var{m}} are used only +when they exactly match the specified size; the search for the next +larger supported size ignores them. In the above example, even if your +VGA supports 38x80 dimensions and you define a variable +@code{screen-dimensions-38x80} with a suitable value, you will still get +40x80 screen when you ask for a 36x80 frame. If you want to get the +38x80 size in this case, you can do it by setting the variable named +@code{screen-dimensions-36x80} with the same video mode value as +@code{screen-dimensions-38x80}. + + Changing frame dimensions on MS-DOS has the effect of changing all the +other frames to the new dimensions. + +@node MS-DOS File Names +@subsection File Names on MS-DOS +@cindex file names under MS-DOS +@cindex init file, default name under MS-DOS + + On MS-DOS, file names are case-insensitive and limited to eight +characters, plus optionally a period and three more characters. Emacs +knows enough about these limitations to handle file names that were +meant for other operating systems. For instance, leading dots +@samp{.} in file names are invalid in MS-DOS, so Emacs transparently +converts them to underscores @samp{_}; thus your default init file +@iftex +(@pxref{Init File,,,emacs, the Emacs Manual}) +@end iftex +@ifnottex +(@pxref{Init File}) +@end ifnottex +is called @file{_emacs} on MS-DOS. Excess characters before or after +the period are generally ignored by MS-DOS itself; thus, if you visit +the file @file{LongFileName.EvenLongerExtension}, you will silently +get @file{longfile.eve}, but Emacs will still display the long file +name on the mode line. Other than that, it's up to you to specify +file names which are valid under MS-DOS; the transparent conversion as +described above only works on file names built into Emacs. + +@cindex backup file names on MS-DOS + The above restrictions on the file names on MS-DOS make it almost +impossible to construct the name of a backup file +@iftex +(@pxref{Backup Names,,,emacs, the Emacs Manual}) +@end iftex +@ifnottex +(@pxref{Backup Names}) +@end ifnottex +without losing some of the original file name characters. For +example, the name of a backup file for @file{docs.txt} is +@file{docs.tx~} even if single backup is used. + +@cindex file names under Windows 95/NT +@cindex long file names in DOS box under Windows 95/NT + If you run Emacs as a DOS application under Windows 9X, Windows ME, or +Windows 2000/XP, you can turn on support for long file names. If you do +that, Emacs doesn't truncate file names or convert them to lower case; +instead, it uses the file names that you specify, verbatim. To enable +long file name support, set the environment variable @env{LFN} to +@samp{y} before starting Emacs. Unfortunately, Windows NT doesn't allow +DOS programs to access long file names, so Emacs built for MS-DOS will +only see their short 8+3 aliases. + +@cindex @env{HOME} directory under MS-DOS + MS-DOS has no notion of home directory, so Emacs on MS-DOS pretends +that the directory where it is installed is the value of the @env{HOME} +environment variable. That is, if your Emacs binary, +@file{emacs.exe}, is in the directory @file{c:/utils/emacs/bin}, then +Emacs acts as if @env{HOME} were set to @samp{c:/utils/emacs}. In +particular, that is where Emacs looks for the init file @file{_emacs}. +With this in mind, you can use @samp{~} in file names as an alias for +the home directory, as you would on GNU or Unix. You can also set +@env{HOME} variable in the environment before starting Emacs; its +value will then override the above default behavior. + + Emacs on MS-DOS handles the directory name @file{/dev} specially, +because of a feature in the emulator libraries of DJGPP that pretends +I/O devices have names in that directory. We recommend that you avoid +using an actual directory named @file{/dev} on any disk. + +@node MS-DOS Printing +@subsection Printing and MS-DOS + + Printing commands, such as @code{lpr-buffer} +@iftex +(@pxref{Printing,,,emacs, the Emacs Manual}) and @code{ps-print-buffer} +(@pxref{PostScript,,,emacs, the Emacs Manual}) +@end iftex +@ifnottex +(@pxref{Printing}) and @code{ps-print-buffer} (@pxref{PostScript}) +@end ifnottex +can work on MS-DOS by sending the output to one of the printer ports, +if a Posix-style @code{lpr} program is unavailable. The same Emacs +variables control printing on all systems, but in some cases they have +different default values on MS-DOS. + +@iftex +@xref{Windows Printing,,,emacs, the Emacs Manual}, +@end iftex +@ifnottex +@xref{Windows Printing}, +@end ifnottex +for details about setting up printing to a networked printer. + + Some printers expect DOS codepage encoding of non-@acronym{ASCII} text, even +though they are connected to a Windows machine which uses a different +encoding for the same locale. For example, in the Latin-1 locale, DOS +uses codepage 850 whereas Windows uses codepage 1252. @xref{MS-DOS and +MULE}. When you print to such printers from Windows, you can use the +@kbd{C-x RET c} (@code{universal-coding-system-argument}) command before +@kbd{M-x lpr-buffer}; Emacs will then convert the text to the DOS +codepage that you specify. For example, @kbd{C-x RET c cp850-dos RET +M-x lpr-region RET} will print the region while converting it to the +codepage 850 encoding. You may need to create the @code{cp@var{nnn}} +coding system with @kbd{M-x codepage-setup}. + +@vindex dos-printer +@vindex dos-ps-printer + For backwards compatibility, the value of @code{dos-printer} +(@code{dos-ps-printer}), if it has a value, overrides the value of +@code{printer-name} (@code{ps-printer-name}), on MS-DOS. + + +@node MS-DOS and MULE +@subsection International Support on MS-DOS +@cindex international support @r{(MS-DOS)} + + Emacs on MS-DOS supports the same international character sets as it +does on GNU, Unix and other platforms +@iftex +(@pxref{International,,,emacs, the Emacs Manual}), +@end iftex +@ifnottex +(@pxref{International}), +@end ifnottex +including coding systems for converting between the different +character sets. However, due to incompatibilities between +MS-DOS/MS-Windows and other systems, there are several DOS-specific +aspects of this support that you should be aware of. This section +describes these aspects. + + The description below is largely specific to the MS-DOS port of +Emacs, especially where it talks about practical implications for +Emacs users. For other operating systems, see the @file{code-pages.el} +package, which implements support for MS-DOS- and MS-Windows-specific +encodings for all platforms other than MS-DOS. + +@table @kbd +@item M-x dos-codepage-setup +Set up Emacs display and coding systems as appropriate for the current +DOS codepage. + +@item M-x codepage-setup +Create a coding system for a certain DOS codepage. +@end table + +@cindex codepage, MS-DOS +@cindex DOS codepages + MS-DOS is designed to support one character set of 256 characters at +any given time, but gives you a variety of character sets to choose +from. The alternative character sets are known as @dfn{DOS codepages}. +Each codepage includes all 128 @acronym{ASCII} characters, but the other 128 +characters (codes 128 through 255) vary from one codepage to another. +Each DOS codepage is identified by a 3-digit number, such as 850, 862, +etc. + + In contrast to X, which lets you use several fonts at the same time, +MS-DOS normally doesn't allow use of several codepages in a single +session. MS-DOS was designed to load a single codepage at system +startup, and require you to reboot in order to change +it@footnote{Normally, one particular codepage is burnt into the +display memory, while other codepages can be installed by modifying +system configuration files, such as @file{CONFIG.SYS}, and rebooting. +While there is third-party software that allows changing the codepage +without rebooting, we describe here how a stock MS-DOS system +behaves.}. Much the same limitation applies when you run DOS +executables on other systems such as MS-Windows. + +@cindex unibyte operation @r{(MS-DOS)} + If you invoke Emacs on MS-DOS with the @samp{--unibyte} option +@iftex +(@pxref{Initial Options,,,emacs, the Emacs Manual}), +@end iftex +@ifnottex +(@pxref{Initial Options}), +@end ifnottex +Emacs does not perform any conversion of non-@acronym{ASCII} +characters. Instead, it reads and writes any non-@acronym{ASCII} +characters verbatim, and sends their 8-bit codes to the display +verbatim. Thus, unibyte Emacs on MS-DOS supports the current +codepage, whatever it may be, but cannot even represent any other +characters. + +@vindex dos-codepage + For multibyte operation on MS-DOS, Emacs needs to know which +characters the chosen DOS codepage can display. So it queries the +system shortly after startup to get the chosen codepage number, and +stores the number in the variable @code{dos-codepage}. Some systems +return the default value 437 for the current codepage, even though the +actual codepage is different. (This typically happens when you use the +codepage built into the display hardware.) You can specify a different +codepage for Emacs to use by setting the variable @code{dos-codepage} in +your init file. + +@cindex language environment, automatic selection on @r{MS-DOS} + Multibyte Emacs supports only certain DOS codepages: those which can +display Far-Eastern scripts, like the Japanese codepage 932, and those +that encode a single ISO 8859 character set. + + The Far-Eastern codepages can directly display one of the MULE +character sets for these countries, so Emacs simply sets up to use the +appropriate terminal coding system that is supported by the codepage. +The special features described in the rest of this section mostly +pertain to codepages that encode ISO 8859 character sets. + + For the codepages which correspond to one of the ISO character sets, +Emacs knows the character set name based on the codepage number. Emacs +automatically creates a coding system to support reading and writing +files that use the current codepage, and uses this coding system by +default. The name of this coding system is @code{cp@var{nnn}}, where +@var{nnn} is the codepage number.@footnote{The standard Emacs coding +systems for ISO 8859 are not quite right for the purpose, because +typically the DOS codepage does not match the standard ISO character +codes. For example, the letter @samp{@,{c}} (@samp{c} with cedilla) has +code 231 in the standard Latin-1 character set, but the corresponding +DOS codepage 850 uses code 135 for this glyph.} + +@cindex mode line @r{(MS-DOS)} + All the @code{cp@var{nnn}} coding systems use the letter @samp{D} +(for ``DOS'') as their mode-line mnemonic. Since both the terminal +coding system and the default coding system for file I/O are set to +the proper @code{cp@var{nnn}} coding system at startup, it is normal +for the mode line on MS-DOS to begin with @samp{-DD\-}. +@iftex +@xref{Mode Line,,,emacs, the Emacs Manual}. +@end iftex +@ifnottex +@xref{Mode Line}. +@end ifnottex +Far-Eastern DOS terminals do not use the @code{cp@var{nnn}} coding +systems, and thus their initial mode line looks like the Emacs +default. + + Since the codepage number also indicates which script you are using, +Emacs automatically runs @code{set-language-environment} to select the +language environment for that script +@iftex +(@pxref{Language Environments,,,emacs, the Emacs Manual}). +@end iftex +@ifnottex +(@pxref{Language Environments}). +@end ifnottex + + If a buffer contains a character belonging to some other ISO 8859 +character set, not the one that the chosen DOS codepage supports, Emacs +displays it using a sequence of @acronym{ASCII} characters. For example, if the +current codepage doesn't have a glyph for the letter @samp{@`o} (small +@samp{o} with a grave accent), it is displayed as @samp{@{`o@}}, where +the braces serve as a visual indication that this is a single character. +(This may look awkward for some non-Latin characters, such as those from +Greek or Hebrew alphabets, but it is still readable by a person who +knows the language.) Even though the character may occupy several +columns on the screen, it is really still just a single character, and +all Emacs commands treat it as one. + +@cindex IBM graphics characters (MS-DOS) +@cindex box-drawing characters (MS-DOS) +@cindex line-drawing characters (MS-DOS) + Not all characters in DOS codepages correspond to ISO 8859 +characters---some are used for other purposes, such as box-drawing +characters and other graphics. Emacs maps these characters to two +special character sets called @code{eight-bit-control} and +@code{eight-bit-graphic}, and displays them as their IBM glyphs. +However, you should be aware that other systems might display these +characters differently, so you should avoid them in text that might be +copied to a different operating system, or even to another DOS machine +that uses a different codepage. + +@vindex dos-unsupported-character-glyph + Emacs supports many other characters sets aside from ISO 8859, but it +cannot display them on MS-DOS. So if one of these multibyte characters +appears in a buffer, Emacs on MS-DOS displays them as specified by the +@code{dos-unsupported-character-glyph} variable; by default, this glyph +is an empty triangle. Use the @kbd{C-u C-x =} command to display the +actual code and character set of such characters. +@iftex +@xref{Position Info,,,emacs, the Emacs Manual}. +@end iftex +@ifnottex +@xref{Position Info}. +@end ifnottex + +@findex codepage-setup + By default, Emacs defines a coding system to support the current +codepage. To define a coding system for some other codepage (e.g., to +visit a file written on a DOS machine in another country), use the +@kbd{M-x codepage-setup} command. It prompts for the 3-digit code of +the codepage, with completion, then creates the coding system for the +specified codepage. You can then use the new coding system to read and +write files, but you must specify it explicitly for the file command +when you want to use it +@iftex +(@pxref{Text Coding,,,emacs, the Emacs Manual}). +@end iftex +@ifnottex +(@pxref{Text Coding}). +@end ifnottex + + These coding systems are also useful for visiting a file encoded using +a DOS codepage, using Emacs running on some other operating system. + +@cindex MS-Windows codepages + MS-Windows provides its own codepages, which are different from the +DOS codepages for the same locale. For example, DOS codepage 850 +supports the same character set as Windows codepage 1252; DOS codepage +855 supports the same character set as Windows codepage 1251, etc. +The MS-Windows version of Emacs uses the current codepage for display +when invoked with the @samp{-nw} option. Support for codepages in the +Windows port of Emacs is part of the @file{code-pages.el} package. + +@node MS-DOS Processes +@subsection Subprocesses on MS-DOS + +@cindex compilation under MS-DOS +@cindex inferior processes under MS-DOS +@findex compile @r{(MS-DOS)} +@findex grep @r{(MS-DOS)} + Because MS-DOS is a single-process ``operating system,'' +asynchronous subprocesses are not available. In particular, Shell +mode and its variants do not work. Most Emacs features that use +asynchronous subprocesses also don't work on MS-DOS, including +Shell mode and GUD. When in doubt, try and see; commands that +don't work output an error message saying that asynchronous processes +aren't supported. + + Compilation under Emacs with @kbd{M-x compile}, searching files with +@kbd{M-x grep} and displaying differences between files with @kbd{M-x +diff} do work, by running the inferior processes synchronously. This +means you cannot do any more editing until the inferior process +finishes. + + Spell checking also works, by means of special support for synchronous +invocation of the @code{ispell} program. This is slower than the +asynchronous invocation on other platforms + + Instead of the Shell mode, which doesn't work on MS-DOS, you can use +the @kbd{M-x eshell} command. This invokes the Eshell package that +implements a Posix-like shell entirely in Emacs Lisp. + + By contrast, Emacs compiled as a native Windows application +@strong{does} support asynchronous subprocesses. +@iftex +@xref{Windows Processes,,,emacs, the Emacs Manual}. +@end iftex +@ifnottex +@xref{Windows Processes}. +@end ifnottex + +@cindex printing under MS-DOS + Printing commands, such as @code{lpr-buffer} +@iftex +(@pxref{Printing,,,emacs, the Emacs Manual}) and +@code{ps-print-buffer} (@pxref{PostScript,,,emacs, the Emacs Manual}), +work in MS-DOS by sending the output to one of the printer ports. +@xref{MS-DOS Printing,,,emacs, the Emacs Manual}. +@end iftex +@ifnottex +(@pxref{Printing}) and @code{ps-print-buffer} (@pxref{PostScript}), +work in MS-DOS by sending the output to one of the printer ports. +@xref{MS-DOS Printing}. +@end ifnottex + + When you run a subprocess synchronously on MS-DOS, make sure the +program terminates and does not try to read keyboard input. If the +program does not terminate on its own, you will be unable to terminate +it, because MS-DOS provides no general way to terminate a process. +Pressing @kbd{C-c} or @kbd{C-@key{BREAK}} might sometimes help in these +cases. + + Accessing files on other machines is not supported on MS-DOS. Other +network-oriented commands such as sending mail, Web browsing, remote +login, etc., don't work either, unless network access is built into +MS-DOS with some network redirector. + +@cindex directory listing on MS-DOS +@vindex dired-listing-switches @r{(MS-DOS)} + Dired on MS-DOS uses the @code{ls-lisp} package where other +platforms use the system @code{ls} command. Therefore, Dired on +MS-DOS supports only some of the possible options you can mention in +the @code{dired-listing-switches} variable. The options that work are +@samp{-A}, @samp{-a}, @samp{-c}, @samp{-i}, @samp{-r}, @samp{-S}, +@samp{-s}, @samp{-t}, and @samp{-u}. + +@ignore + arch-tag: 868d50ff-07f8-4a13-a807-dab6f1cdb431 +@end ignore diff --git a/doc/emacs/msdog.texi b/doc/emacs/msdog.texi new file mode 100644 index 00000000000..0ed15229b7c --- /dev/null +++ b/doc/emacs/msdog.texi @@ -0,0 +1,766 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Microsoft Windows, Manifesto, Mac OS, Top +@appendix Emacs and Microsoft Windows/MS-DOS +@cindex Microsoft Windows +@cindex MS-Windows, Emacs peculiarities + + This section describes peculiarities of using Emacs on Microsoft +Windows. Some of these peculiarities are also relevant to Microsoft's +older MS-DOS ``operating system'' (also known as ``MS-DOG''). +However, Emacs features that are relevant @emph{only} to MS-DOS are +described in a separate +@iftex +manual (@pxref{MS-DOS,,, emacs-xtra, Specialized Emacs Features}). +@end iftex +@ifnottex +section (@pxref{MS-DOS}). +@end ifnottex + + + The behavior of Emacs on MS-Windows is reasonably similar to what is +documented in the rest of the manual, including support for long file +names, multiple frames, scroll bars, mouse menus, and subprocesses. +However, a few special considerations apply, and they are described +here. + +@menu +* Text and Binary:: Text files use CRLF to terminate lines. +* Windows Files:: File-name conventions on Windows. +* ls in Lisp:: Emulation of @code{ls} for Dired. +* Windows HOME:: Where Emacs looks for your @file{.emacs}. +* Windows Keyboard:: Windows-specific keyboard features. +* Windows Mouse:: Windows-specific mouse features. +* Windows Processes:: Running subprocesses on Windows. +* Windows Printing:: How to specify the printer on MS-Windows. +* Windows Misc:: Miscellaneous Windows features. +@ifnottex +* MS-DOS:: Using Emacs on MS-DOS (otherwise known as @dfn{MS-DOG}). +@end ifnottex +@end menu + +@node Text and Binary +@section Text Files and Binary Files +@cindex text and binary files on MS-DOS/MS-Windows + + GNU Emacs uses newline characters to separate text lines. This is the +convention used on GNU, Unix, and other Posix-compliant systems. + +@cindex end-of-line conversion on MS-DOS/MS-Windows + By contrast, MS-DOS and MS-Windows normally use carriage-return linefeed, +a two-character sequence, to separate text lines. (Linefeed is the same +character as newline.) Therefore, convenient editing of typical files +with Emacs requires conversion of these end-of-line (EOL) sequences. +And that is what Emacs normally does: it converts carriage-return +linefeed into newline when reading files, and converts newline into +carriage-return linefeed when writing files. The same mechanism that +handles conversion of international character codes does this conversion +also (@pxref{Coding Systems}). + +@cindex cursor location, on MS-DOS +@cindex point location, on MS-DOS + One consequence of this special format-conversion of most files is +that character positions as reported by Emacs (@pxref{Position Info}) do +not agree with the file size information known to the operating system. + + In addition, if Emacs recognizes from a file's contents that it uses +newline rather than carriage-return linefeed as its line separator, it +does not perform EOL conversion when reading or writing that file. +Thus, you can read and edit files from GNU and Unix systems on MS-DOS +with no special effort, and they will retain their Unix-style +end-of-line convention after you edit them. + + The mode line indicates whether end-of-line translation was used for +the current buffer. If MS-DOS end-of-line translation is in use for the +buffer, the MS-Windows build of Emacs displays a backslash @samp{\} after +the coding system mnemonic near the beginning of the mode line +(@pxref{Mode Line}). If no EOL translation was performed, the string +@samp{(Unix)} is displayed instead of the backslash, to alert you that the +file's EOL format is not the usual carriage-return linefeed. + +@cindex DOS-to-Unix conversion of files + To visit a file and specify whether it uses DOS-style or Unix-style +end-of-line, specify a coding system (@pxref{Text Coding}). For +example, @kbd{C-x @key{RET} c unix @key{RET} C-x C-f foobar.txt} +visits the file @file{foobar.txt} without converting the EOLs; if some +line ends with a carriage-return linefeed pair, Emacs will display +@samp{^M} at the end of that line. Similarly, you can direct Emacs to +save a buffer in a specified EOL format with the @kbd{C-x @key{RET} f} +command. For example, to save a buffer with Unix EOL format, type +@kbd{C-x @key{RET} f unix @key{RET} C-x C-s}. If you visit a file +with DOS EOL conversion, then save it with Unix EOL format, that +effectively converts the file to Unix EOL style, like @code{dos2unix}. + +@cindex untranslated file system +@findex add-untranslated-filesystem + When you use NFS, Samba, or some other similar method to access file +systems that reside on computers using GNU or Unix systems, Emacs +should not perform end-of-line translation on any files in these file +systems---not even when you create a new file. To request this, +designate these file systems as @dfn{untranslated} file systems by +calling the function @code{add-untranslated-filesystem}. It takes one +argument: the file system name, including a drive letter and +optionally a directory. For example, + +@example +(add-untranslated-filesystem "Z:") +@end example + +@noindent +designates drive Z as an untranslated file system, and + +@example +(add-untranslated-filesystem "Z:\\foo") +@end example + +@noindent +designates directory @file{\foo} on drive Z as an untranslated file +system. + + Most often you would use @code{add-untranslated-filesystem} in your +@file{.emacs} file, or in @file{site-start.el} so that all the users at +your site get the benefit of it. + +@findex remove-untranslated-filesystem + To countermand the effect of @code{add-untranslated-filesystem}, use +the function @code{remove-untranslated-filesystem}. This function takes +one argument, which should be a string just like the one that was used +previously with @code{add-untranslated-filesystem}. + + Designating a file system as untranslated does not affect character +set conversion, only end-of-line conversion. Essentially, it directs +Emacs to create new files with the Unix-style convention of using +newline at the end of a line. @xref{Coding Systems}. + +@vindex file-name-buffer-file-type-alist +@cindex binary files, on MS-DOS/MS-Windows + Some kinds of files should not be converted at all, because their +contents are not really text. Therefore, Emacs on MS-Windows distinguishes +certain files as @dfn{binary files}. (This distinction is not part of +MS-Windows; it is made by Emacs only.) Binary files include executable +programs, compressed archives, etc. Emacs uses the file name to decide +whether to treat a file as binary: the variable +@code{file-name-buffer-file-type-alist} defines the file-name patterns +that indicate binary files. If a file name matches one of the patterns +for binary files (those whose associations are of the type +@code{(@var{pattern} . t)}, Emacs reads and writes that file using the +@code{no-conversion} coding system (@pxref{Coding Systems}) which turns +off @emph{all} coding-system conversions, not only the EOL conversion. +@code{file-name-buffer-file-type-alist} also includes file-name patterns +for files which are known to be Windows-style text files with +carriage-return linefeed EOL format, such as @file{CONFIG.SYS}; Emacs +always writes those files with Windows-style EOLs. + + If a file which belongs to an untranslated file system matches one of +the file-name patterns in @code{file-name-buffer-file-type-alist}, the +EOL conversion is determined by @code{file-name-buffer-file-type-alist}. + +@node Windows Files +@section File Names on MS-Windows +@cindex file names on MS-Windows + + MS-Windows and MS-DOS normally use a backslash, @samp{\}, to +separate name units within a file name, instead of the slash used on +other systems. Emacs on MS-DOS/MS-Windows permits use of either slash or +backslash, and also knows about drive letters in file names. + +@cindex file-name completion, on MS-Windows + On MS-DOS/MS-Windows, file names are case-insensitive, so Emacs by +default ignores letter-case in file names during completion. + +@vindex w32-get-true-file-attributes + If the variable @code{w32-get-true-file-attributes} is +non-@code{nil} (the default), Emacs tries to determine the accurate +link counts for files. This option is only useful on NTFS volumes, +and it considerably slows down Dired and other features, so use it +only on fast machines. + +@node ls in Lisp +@section Emulation of @code{ls} on MS-Windows +@cindex Dired, and MS-Windows/MS-DOS +@cindex @code{ls} emulation + + Dired normally uses the external program @code{ls} (or its close +work-alike) to produce the directory listing displayed in Dired +buffers (@pxref{Dired}). However, MS-Windows and MS-DOS systems don't +come with such a program, although several ports of @sc{gnu} @code{ls} +are available. Therefore, Emacs on those systems @emph{emulates} +@code{ls} in Lisp, by using the @file{ls-lisp.el} package. While +@file{ls-lisp.el} provides a reasonably full emulation of @code{ls}, +there are some options and features peculiar to that emulation; +@iftex +for more details, see the documentation of the variables whose names +begin with @code{ls-lisp}. +@end iftex +@ifnottex +they are described in this section. + + The @code{ls} emulation supports many of the @code{ls} switches, but +it doesn't support all of them. Here's the list of the switches it +does support: @option{-A}, @option{-a}, @option{-B}, @option{-C}, +@option{-c}, @option{-i}, @option{-G}, @option{-g}, @option{-R}, +@option{-r}, @option{-S}, @option{-s}, @option{-t}, @option{-U}, +@option{-u}, and @option{-X}. The @option{-F} switch is partially +supported (it appends the character that classifies the file, but does +not prevent symlink following). + +@vindex ls-lisp-use-insert-directory-program + On MS-Windows and MS-DOS, @file{ls-lisp.el} is preloaded when Emacs +is built, so the Lisp emulation of @code{ls} is always used on those +platforms. If you have a ported @code{ls}, setting +@code{ls-lisp-use-insert-directory-program} to a non-@code{nil} value +will revert to using an external program named by the variable +@code{insert-directory-program}. + +@vindex ls-lisp-ignore-case + By default, @file{ls-lisp.el} uses a case-sensitive sort order for +the directory listing it produces; this is so the listing looks the +same as on other platforms. If you wish that the files be sorted in +case-insensitive order, set the variable @code{ls-lisp-ignore-case} to +a non-@code{nil} value. + +@vindex ls-lisp-dirs-first + By default, files and subdirectories are sorted together, to emulate +the behavior of @code{ls}. However, native MS-Windows/MS-DOS file +managers list the directories before the files; if you want that +behavior, customize the option @code{ls-lisp-dirs-first} to a +non-@code{nil} value. + +@vindex ls-lisp-verbosity + The variable @code{ls-lisp-verbosity} controls the file attributes +that @file{ls-lisp.el} displays. The value should be a list that +contains one or more of the symbols @code{links}, @code{uid}, and +@code{gid}. @code{links} means display the count of different file +names that are associated with (a.k.a.@: @dfn{links to}) the file's +data; this is only useful on NTFS volumes. @code{uid} means display +the numerical identifier of the user who owns the file. @code{gid} +means display the numerical identifier of the file owner's group. The +default value is @code{(links uid gid)} i.e.@: all the 3 optional +attributes are displayed. + +@vindex ls-lisp-emulation + The variable @code{ls-lisp-emulation} controls the flavour of the +@code{ls} emulation by setting the defaults for the 3 options +described above: @code{ls-lisp-ignore-case}, +@code{ls-lisp-dirs-first}, and @code{ls-lisp-verbosity}. The value of +this option can be one of the following symbols: + +@table @code +@item GNU +@itemx nil +Emulate @sc{gnu} systems; this is the default. This sets +@code{ls-lisp-ignore-case} and @code{ls-lisp-dirs-first} to +@code{nil}, and @code{ls-lisp-verbosity} to @code{(links uid gid)}. +@item UNIX +Emulate Unix systems. Like @code{GNU}, but sets +@code{ls-lisp-verbosity} to @code{(links uid)}. +@item MacOS +Emulate MacOS. Sets @code{ls-lisp-ignore-case} to @code{t}, and +@code{ls-lisp-dirs-first} and @code{ls-lisp-verbosity} to @code{nil}. +@item MS-Windows +Emulate MS-Windows. Sets @code{ls-lisp-ignore-case} and +@code{ls-lisp-dirs-first} to @code{t}, and @code{ls-lisp-verbosity} to +@code{(links)} on Windows NT/2K/XP/2K3 and to @code{nil} on Windows 9X. +Note that the default emulation is @emph{not} @code{MS-Windows}, even +on Windows, since many users of Emacs on those platforms prefer the +@sc{gnu} defaults. +@end table + +@noindent +Any other value of @code{ls-lisp-emulation} means the same as +@code{GNU}. Note that this option needs to be set @emph{before} +@file{ls-lisp.el} is loaded, which means that on MS-Windows and MS-DOS +you will have to set the value from your @file{.emacs} file and then +restart Emacs, since @file{ls-lisp.el} is preloaded. + +@vindex ls-lisp-support-shell-wildcards + The variable @code{ls-lisp-support-shell-wildcards} controls how +file-name patterns are supported: if it is non-@code{nil} (the +default), they are treated as shell-style wildcards; otherwise they +are treated as Emacs regular expressions. + +@vindex ls-lisp-format-time-list + The variable @code{ls-lisp-format-time-list} defines how to format +the date and time of files. @emph{The value of this variable is +ignored}, unless Emacs cannot determine the current locale. (However, +if the value of @code{ls-lisp-use-localized-time-format} is +non-@code{nil}, Emacs obeys @code{ls-lisp-format-time-list} even if +the current locale is available; see below.) + +The value of @code{ls-lisp-format-time-list} is a list of 2 strings. +The first string is used if the file was modified within the current +year, while the second string is used for older files. In each of +these two strings you can use @samp{%}-sequences to substitute parts +of the time. For example: +@lisp +("%b %e %H:%M" "%b %e %Y") +@end lisp + +@noindent +Note that the strings substituted for these @samp{%}-sequences depend +on the current locale. @xref{Time Parsing,,, elisp, The Emacs Lisp +Reference Manual}, for more about format time specs. + +@vindex ls-lisp-use-localized-time-format + Normally, Emacs formats the file time stamps in either traditional +or ISO-style time format. However, if the value of the variable +@code{ls-lisp-use-localized-time-format} is non-@code{nil}, Emacs +formats file time stamps according to what +@code{ls-lisp-format-time-list} specifies. The @samp{%}-sequences in +@code{ls-lisp-format-time-list} produce locale-dependent month and day +names, which might cause misalignment of columns in Dired display. +@end ifnottex + +@node Windows HOME +@section HOME Directory on MS-Windows +@cindex @code{HOME} directory on MS-Windows + + The Windows equivalent of the @code{HOME} directory is the +@dfn{user-specific application data directory}. The actual location +depends on your Windows version and system configuration; typical values +are @file{C:\Documents and Settings\@var{username}\Application Data} on +Windows 2K/XP and later, and either @file{C:\WINDOWS\Application Data} +or @file{C:\WINDOWS\Profiles\@var{username}\Application Data} on the +older Windows 9X/ME systems. + +@cindex init file @file{.emacs} on MS-Windows + The home directory is where your init file @file{.emacs} is stored. +When Emacs starts, it first checks whether the environment variable +@env{HOME} is set. If it is, it looks for the init file in the +directory pointed by @env{HOME}. If @env{HOME} is not defined, Emacs +checks for an existing @file{.emacs} file in @file{C:\}, the root +directory of drive @file{C:}@footnote{ +The check in @file{C:\} is in preference to the application data +directory for compatibility with older versions of Emacs, which didn't +check the application data directory. +}. If there's no such file in @file{C:\}, Emacs next uses the Windows +system calls to find out the exact location of your application data +directory. If that fails as well, Emacs falls back to @file{C:\}. + + Whatever the final place is, Emacs sets the value of the @env{HOME} +environment variable to point to it, and it will use that location for +other files and directories it normally creates in the user's home +directory. + + You can always find out where Emacs thinks is your home directory's +location by typing @kbd{C-x d ~/ @key{RET}}. This should present the +list of files in the home directory, and show its full name on the +first line. Likewise, to visit your init file, type @kbd{C-x C-f +~/.emacs @key{RET}}. + +@cindex @file{_emacs} init file, MS-Windows + Because MS-DOS does not allow file names with leading dots, and +because older Windows systems made it hard to create files with such +names, the Windows port of Emacs supports an alternative name +@file{_emacs} as a fallback, if such a file exists in the home +directory, whereas @file{.emacs} does not. + +@node Windows Keyboard +@section Keyboard Usage on MS-Windows +@cindex keyboard, MS-Windows + + This section describes the Windows-specific features related to +keyboard input in Emacs. + +@cindex MS-Windows keyboard shortcuts + Many key combinations (known as ``keyboard shortcuts'') that have +conventional uses in MS-Windows programs conflict with traditional +Emacs key bindings. (These Emacs key bindings were established years +before Microsoft was founded.) Examples of conflicts include +@kbd{C-c}, @kbd{C-x}, @kbd{C-z}, @kbd{C-a}, and @kbd{W-@key{SPC}}. +You can redefine some of them with meanings more like the MS-Windows +meanings by enabling CUA Mode (@pxref{CUA Bindings}). + +@kindex F10 @r{(MS-Windows)} +@cindex menu bar access using keyboard @r{(MS-Windows)} + The @key{F10} key on Windows activates the menu bar in a way that +makes it possible to use the menus without a mouse. In this mode, the +arrow keys traverse the menus, @key{RET} selects a highlighted menu +item, and @key{ESC} closes the menu. + +@iftex +@inforef{Windows Keyboard, , emacs}, for information about additional +Windows-specific variables in this category. +@end iftex +@ifnottex +@vindex w32-alt-is-meta +@cindex @code{Alt} key (MS-Windows) + By default, the key labeled @key{Alt} is mapped as the @key{META} +key. If you wish it to produce the @code{Alt} modifier instead, set +the variable @code{w32-alt-is-meta} to a @code{nil} value. + +@vindex w32-capslock-is-shiftlock + By default, the @key{CapsLock} key only affects normal character +keys (it converts lower-case characters to their upper-case +variants). However, if you set the variable +@code{w32-capslock-is-shiftlock} to a non-@code{nil} value, the +@key{CapsLock} key will affect non-character keys as well, as if you +pressed the @key{Shift} key while typing the non-character key. + +@vindex w32-enable-caps-lock + If the variable @code{w32-enable-caps-lock} is set to a @code{nil} +value, the @key{CapsLock} key produces the symbol @code{capslock} +instead of the shifted version of they keys. The default value is +@code{t}. + +@vindex w32-enable-num-lock +@cindex keypad keys (MS-Windows) + Similarly, if @code{w32-enable-num-lock} is @code{nil}, the +@key{NumLock} key will produce the symbol @code{kp-numlock}. The +default is @code{t}, which causes @key{NumLock} to work as expected: +toggle the meaning of the keys on the numeric keypad. +@end ifnottex + +@vindex w32-apps-modifier + The variable @code{w32-apps-modifier} controls the effect of the +@key{Apps} key (usually located between the right @key{Alt} and the +right @key{Ctrl} keys). Its value can be one of the symbols +@code{hyper}, @code{super}, @code{meta}, @code{alt}, @code{control}, +or @code{shift} for the respective modifier, or @code{nil} to appear +as the key @code{apps}. The default is @code{nil}. + +@vindex w32-lwindow-modifier +@vindex w32-rwindow-modifier +@vindex w32-scroll-lock-modifier + The variable @code{w32-lwindow-modifier} determines the effect of +the left Windows key (usually labeled with @key{start} and the Windows +logo). If its value is @code{nil} (the default), the key will produce +the symbol @code{lwindow}. Setting it to one of the symbols +@code{hyper}, @code{super}, @code{meta}, @code{alt}, @code{control}, +or @code{shift} will produce the respective modifier. A similar +variable @code{w32-rwindow-modifier} controls the effect of the right +Windows key, and @code{w32-scroll-lock-modifier} does the same for the +@key{ScrLock} key. If these variables are set to @code{nil}, the +right Windows key produces the symbol @code{rwindow} and @key{ScrLock} +produces the symbol @code{scroll}. + +@vindex w32-pass-alt-to-system +@cindex Windows system menu +@cindex @code{Alt} key invokes menu (Windows) + Emacs compiled as a native Windows application normally turns off +the Windows feature that tapping the @key{ALT} key invokes the Windows +menu. The reason is that the @key{ALT} serves as @key{META} in Emacs. +When using Emacs, users often press the @key{META} key temporarily and +then change their minds; if this has the effect of bringing up the +Windows menu, it alters the meaning of subsequent commands. Many +users find this frustrating. + + You can re-enable Windows' default handling of tapping the @key{ALT} +key by setting @code{w32-pass-alt-to-system} to a non-@code{nil} +value. + +@ifnottex +@vindex w32-pass-lwindow-to-system +@vindex w32-pass-rwindow-to-system + The variables @code{w32-pass-lwindow-to-system} and +@code{w32-pass-rwindow-to-system} determine whether the respective +keys are passed to Windows or swallowed by Emacs. If the value is +@code{nil}, the respective key is silently swallowed by Emacs, +otherwise it is passed to Windows. The default is @code{t} for both +of these variables. Passing each of these keys to Windows produces +its normal effect: for example, @kbd{@key{Lwindow}} opens the +@code{Start} menu, etc.@footnote{ +Some combinations of the ``Windows'' keys with other keys are caught +by Windows at low level in a way that Emacs currently cannot prevent. +For example, @kbd{@key{Lwindow} r} always pops up the Windows +@samp{Run} dialog. Customizing the value of +@code{w32-phantom-key-code} might help in some cases, though.} + +@vindex w32-recognize-altgr +@kindex AltGr @r{(MS-Windows)} +@cindex AltGr key (MS-Windows) + The variable @code{w32-recognize-altgr} controls whether the +@key{AltGr} key (if it exists on your keyboard), or its equivalent, +the combination of the right @key{Alt} and left @key{Ctrl} keys +pressed together, is recognized as the @key{AltGr} key. The default +is @code{t}, which means these keys produce @code{AltGr}; setting it +to @code{nil} causes @key{AltGr} or the equivalent key combination to +be interpreted as the combination of @key{CTRL} and @key{META} +modifiers. +@end ifnottex + +@node Windows Mouse +@section Mouse Usage on MS-Windows +@cindex mouse, and MS-Windows + + This section describes the Windows-specific variables related to +mouse. + +@vindex w32-mouse-button-tolerance +@cindex simulation of middle mouse button + The variable @code{w32-mouse-button-tolerance} specifies the +time interval, in milliseconds, for faking middle mouse button press +on 2-button mice. If both mouse buttons are depressed within this +time interval, Emacs generates a middle mouse button click event +instead of a double click on one of the buttons. + +@vindex w32-pass-extra-mouse-buttons-to-system + If the variable @code{w32-pass-extra-mouse-buttons-to-system} is +non-@code{nil}, Emacs passes the fourth and fifth mouse buttons to +Windows. + +@vindex w32-swap-mouse-buttons + The variable @code{w32-swap-mouse-buttons} controls which of the 3 +mouse buttons generates the @kbd{mouse-2} events. When it is +@code{nil} (the default), the middle button generates @kbd{mouse-2} +and the right button generates @kbd{mouse-3} events. If this variable +is non-@code{nil}, the roles of these two buttons are reversed. + +@node Windows Processes +@section Subprocesses on Windows 9X/ME and Windows NT/2K/XP +@cindex subprocesses on MS-Windows + +@cindex DOS applications, running from Emacs + Emacs compiled as a native Windows application (as opposed to the DOS +version) includes full support for asynchronous subprocesses. +In the Windows version, synchronous and asynchronous subprocesses work +fine on both +Windows 9X/ME and Windows NT/2K/XP as long as you run only 32-bit Windows +applications. However, when you run a DOS application in a subprocess, +you may encounter problems or be unable to run the application at all; +and if you run two DOS applications at the same time in two +subprocesses, you may have to reboot your system. + +Since the standard command interpreter (and most command line utilities) +on Windows 9X are DOS applications, these problems are significant when +using that system. But there's nothing we can do about them; only +Microsoft can fix them. + +If you run just one DOS application subprocess, the subprocess should +work as expected as long as it is ``well-behaved'' and does not perform +direct screen access or other unusual actions. If you have a CPU +monitor application, your machine will appear to be 100% busy even when +the DOS application is idle, but this is only an artifact of the way CPU +monitors measure processor load. + +You must terminate the DOS application before you start any other DOS +application in a different subprocess. Emacs is unable to interrupt or +terminate a DOS subprocess. The only way you can terminate such a +subprocess is by giving it a command that tells its program to exit. + +If you attempt to run two DOS applications at the same time in separate +subprocesses, the second one that is started will be suspended until the +first one finishes, even if either or both of them are asynchronous. + +@cindex kill DOS application +If you can go to the first subprocess, and tell it to exit, the second +subprocess should continue normally. However, if the second subprocess +is synchronous, Emacs itself will be hung until the first subprocess +finishes. If it will not finish without user input, then you have no +choice but to reboot if you are running on Windows 9X. If you are +running on Windows NT/2K/XP, you can use a process viewer application to kill +the appropriate instance of NTVDM instead (this will terminate both DOS +subprocesses). + +If you have to reboot Windows 9X in this situation, do not use the +@code{Shutdown} command on the @code{Start} menu; that usually hangs the +system. Instead, type @kbd{CTL-ALT-@key{DEL}} and then choose +@code{Shutdown}. That usually works, although it may take a few minutes +to do its job. + +@vindex w32-quote-process-args + The variable @code{w32-quote-process-args} controls how Emacs quotes +the process arguments. Non-@code{nil} means quote with the @code{"} +character. If the value is a character, use that character to escape +any quote characters that appear; otherwise chose a suitable escape +character based on the type of the program. + +@ifnottex +@findex w32-shell-execute + The function @code{w32-shell-execute} can be useful for writing +customized commands that run MS-Windows applications registered to +handle a certain standard Windows operation for a specific type of +document or file. This function is a wrapper around the Windows +@code{ShellExecute} API. See the MS-Windows API documentation for +more details. +@end ifnottex + +@node Windows Printing +@section Printing and MS-Windows + + Printing commands, such as @code{lpr-buffer} (@pxref{Printing}) and +@code{ps-print-buffer} (@pxref{PostScript}) work in MS-DOS and +MS-Windows by sending the output to one of the printer ports, if a +Posix-style @code{lpr} program is unavailable. The same Emacs +variables control printing on all systems, but in some cases they have +different default values on MS-DOS and MS-Windows. + + Emacs on Windows automatically determines your default printer and +sets the variable @var{printer-name} to that printer's name. But in +some rare cases this can fail, or you may wish to use a different +printer from within Emacs. The rest of this section explains how to +tell Emacs which printer to use. + +@vindex printer-name@r{, (MS-DOS/MW-Windows)} + If you want to use your local printer, then set the Lisp variable +@code{lpr-command} to @code{""} (its default value on Windows) and +@code{printer-name} to the name of the printer port---for example, +@code{"PRN"}, the usual local printer port or @code{"LPT2"}, or +@code{"COM1"} for a serial printer. You can also set +@code{printer-name} to a file name, in which case ``printed'' output +is actually appended to that file. If you set @code{printer-name} to +@code{"NUL"}, printed output is silently discarded (sent to the system +null device). + + You can also use a printer shared by another machine by setting +@code{printer-name} to the UNC share name for that printer---for +example, @code{"//joes_pc/hp4si"}. (It doesn't matter whether you use +forward slashes or backslashes here.) To find out the names of shared +printers, run the command @samp{net view} from the command prompt to +obtain a list of servers, and @samp{net view @var{server-name}} to see +the names of printers (and directories) shared by that server. +Alternatively, click the @samp{Network Neighborhood} icon on your +desktop, and look for machines which share their printers via the +network. + +@cindex @samp{net use}, and printing on MS-Windows +@cindex networked printers (MS-Windows) + If the printer doesn't appear in the output of @samp{net view}, or +if setting @code{printer-name} to the UNC share name doesn't produce a +hardcopy on that printer, you can use the @samp{net use} command to +connect a local print port such as @code{"LPT2"} to the networked +printer. For example, typing @kbd{net use LPT2: \\joes_pc\hp4si}@footnote{ +Note that the @samp{net use} command requires the UNC share name to be +typed with the Windows-style backslashes, while the value of +@code{printer-name} can be set with either forward- or backslashes.} +causes Windows to @dfn{capture} the @code{LPT2} port and redirect the +printed material to the printer connected to the machine @code{joes_pc}. +After this command, setting @code{printer-name} to @code{"LPT2"} +should produce the hardcopy on the networked printer. + + With some varieties of Windows network software, you can instruct +Windows to capture a specific printer port such as @code{"LPT2"}, and +redirect it to a networked printer via the @w{@code{Control +Panel->Printers}} applet instead of @samp{net use}. + + If you set @code{printer-name} to a file name, it's best to use an +absolute file name. Emacs changes the working directory according to +the default directory of the current buffer, so if the file name in +@code{printer-name} is relative, you will end up with several such +files, each one in the directory of the buffer from which the printing +was done. + + If the value of @code{printer-name} is correct, but printing does +not produce the hardcopy on your printer, it is possible that your +printer does not support printing plain text (some cheap printers omit +this functionality). In that case, try the PostScript print commands, +described below. + +@findex print-buffer @r{(MS-DOS)} +@findex print-region @r{(MS-DOS)} +@vindex lpr-headers-switches @r{(MS-DOS)} + The commands @code{print-buffer} and @code{print-region} call the +@code{pr} program, or use special switches to the @code{lpr} program, to +produce headers on each printed page. MS-DOS and MS-Windows don't +normally have these programs, so by default, the variable +@code{lpr-headers-switches} is set so that the requests to print page +headers are silently ignored. Thus, @code{print-buffer} and +@code{print-region} produce the same output as @code{lpr-buffer} and +@code{lpr-region}, respectively. If you do have a suitable @code{pr} +program (for example, from GNU Coreutils), set +@code{lpr-headers-switches} to @code{nil}; Emacs will then call +@code{pr} to produce the page headers, and print the resulting output as +specified by @code{printer-name}. + +@vindex print-region-function @r{(MS-DOS)} +@cindex lpr usage under MS-DOS +@vindex lpr-command @r{(MS-DOS)} +@vindex lpr-switches @r{(MS-DOS)} + Finally, if you do have an @code{lpr} work-alike, you can set the +variable @code{lpr-command} to @code{"lpr"}. Then Emacs will use +@code{lpr} for printing, as on other systems. (If the name of the +program isn't @code{lpr}, set @code{lpr-command} to specify where to +find it.) The variable @code{lpr-switches} has its standard meaning +when @code{lpr-command} is not @code{""}. If the variable +@code{printer-name} has a string value, it is used as the value for the +@code{-P} option to @code{lpr}, as on Unix. + +@findex ps-print-buffer @r{(MS-DOS)} +@findex ps-spool-buffer @r{(MS-DOS)} +@vindex ps-printer-name @r{(MS-DOS)} +@vindex ps-lpr-command @r{(MS-DOS)} +@vindex ps-lpr-switches @r{(MS-DOS)} + A parallel set of variables, @code{ps-lpr-command}, +@code{ps-lpr-switches}, and @code{ps-printer-name} (@pxref{PostScript +Variables}), defines how PostScript files should be printed. These +variables are used in the same way as the corresponding variables +described above for non-PostScript printing. Thus, the value of +@code{ps-printer-name} is used as the name of the device (or file) to +which PostScript output is sent, just as @code{printer-name} is used +for non-PostScript printing. (There are two distinct sets of +variables in case you have two printers attached to two different +ports, and only one of them is a PostScript printer.) + + The default value of the variable @code{ps-lpr-command} is @code{""}, +which causes PostScript output to be sent to the printer port specified +by @code{ps-printer-name}, but @code{ps-lpr-command} can also be set to +the name of a program which will accept PostScript files. Thus, if you +have a non-PostScript printer, you can set this variable to the name of +a PostScript interpreter program (such as Ghostscript). Any switches +that need to be passed to the interpreter program are specified using +@code{ps-lpr-switches}. (If the value of @code{ps-printer-name} is a +string, it will be added to the list of switches as the value for the +@code{-P} option. This is probably only useful if you are using +@code{lpr}, so when using an interpreter typically you would set +@code{ps-printer-name} to something other than a string so it is +ignored.) + + For example, to use Ghostscript for printing on the system's default +printer, put this in your @file{.emacs} file: + +@example +(setq ps-printer-name t) +(setq ps-lpr-command "D:/gs6.01/bin/gswin32c.exe") +(setq ps-lpr-switches '("-q" "-dNOPAUSE" "-dBATCH" + "-sDEVICE=mswinpr2" + "-sPAPERSIZE=a4")) +@end example + +@noindent +(This assumes that Ghostscript is installed in the +@file{D:/gs6.01} directory.) + +@node Windows Misc +@section Miscellaneous Windows-specific features + + This section describes miscellaneous Windows-specific features. + +@vindex w32-use-visible-system-caret +@cindex screen reader software, MS-Windows + The variable @code{w32-use-visible-system-caret} is a flag that +determines whether to make the system caret visible. The default is +@code{nil}, which means Emacs draws its own cursor to indicate the +position of point. A non-@code{nil} value means Emacs will indicate +point location by the system caret; this facilitates use of screen +reader software. When this variable is non-@code{nil}, other +variables affecting the cursor display have no effect. + +@iftex +@inforef{Windows Misc, , emacs}, for information about additional +Windows-specific variables in this category. +@end iftex + +@ifnottex +@vindex w32-grab-focus-on-raise +@cindex frame focus policy, MS-Windows + The variable @code{w32-grab-focus-on-raise}, if set to a +non-@code{nil} value causes a frame to grab focus when it is raised. +The default is @code{t}, which fits well with the Windows default +click-to-focus policy. + +@vindex w32-list-proportional-fonts + The variable @code{w32-list-proportional-fonts} controls whether +proportional fonts are included in the font selection dialog. If its +value is non-@code{nil}, these fonts will be included. The default is +@code{nil}. +@end ifnottex + +@ifnottex +@include msdog-xtra.texi +@end ifnottex + +@ignore + arch-tag: f39d2590-5dcc-4318-88d9-0eb73ca10fa2 +@end ignore diff --git a/doc/emacs/mule.texi b/doc/emacs/mule.texi new file mode 100644 index 00000000000..c71c820dc27 --- /dev/null +++ b/doc/emacs/mule.texi @@ -0,0 +1,1535 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1997, 1999, 2000, 2001, 2002, 2003, 2004, +@c 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node International, Major Modes, Frames, Top +@chapter International Character Set Support +@cindex MULE +@cindex international scripts +@cindex multibyte characters +@cindex encoding of characters + +@cindex Celtic +@cindex Chinese +@cindex Cyrillic +@cindex Czech +@cindex Devanagari +@cindex Hindi +@cindex Marathi +@cindex Ethiopic +@cindex German +@cindex Greek +@cindex Hebrew +@cindex IPA +@cindex Japanese +@cindex Korean +@cindex Lao +@cindex Latin +@cindex Polish +@cindex Romanian +@cindex Slovak +@cindex Slovenian +@cindex Thai +@cindex Tibetan +@cindex Turkish +@cindex Vietnamese +@cindex Dutch +@cindex Spanish + Emacs supports a wide variety of international character sets, +including European and Vietnamese variants of the Latin alphabet, as +well as Cyrillic, Devanagari (for Hindi and Marathi), Ethiopic, Greek, +Han (for Chinese and Japanese), Hangul (for Korean), Hebrew, IPA, +Kannada, Lao, Malayalam, Tamil, Thai, Tibetan, and Vietnamese scripts. +Emacs also supports various encodings of these characters used by +other internationalized software, such as word processors and mailers. + + Emacs allows editing text with international characters by supporting +all the related activities: + +@itemize @bullet +@item +You can visit files with non-@acronym{ASCII} characters, save non-@acronym{ASCII} text, and +pass non-@acronym{ASCII} text between Emacs and programs it invokes (such as +compilers, spell-checkers, and mailers). Setting your language +environment (@pxref{Language Environments}) takes care of setting up the +coding systems and other options for a specific language or culture. +Alternatively, you can specify how Emacs should encode or decode text +for each command; see @ref{Text Coding}. + +@item +You can display non-@acronym{ASCII} characters encoded by the various +scripts. This works by using appropriate fonts on graphics displays +(@pxref{Defining Fontsets}), and by sending special codes to text-only +displays (@pxref{Terminal Coding}). If some characters are displayed +incorrectly, refer to @ref{Undisplayable Characters}, which describes +possible problems and explains how to solve them. + +@item +You can insert non-@acronym{ASCII} characters or search for them. To do that, +you can specify an input method (@pxref{Select Input Method}) suitable +for your language, or use the default input method set up when you set +your language environment. If +your keyboard can produce non-@acronym{ASCII} characters, you can select an +appropriate keyboard coding system (@pxref{Terminal Coding}), and Emacs +will accept those characters. Latin-1 characters can also be input by +using the @kbd{C-x 8} prefix, see @ref{Unibyte Mode}. + +On X Window systems, your locale should be set to an appropriate value +to make sure Emacs interprets keyboard input correctly; see +@ref{Language Environments, locales}. +@end itemize + + The rest of this chapter describes these issues in detail. + +@menu +* International Chars:: Basic concepts of multibyte characters. +* Enabling Multibyte:: Controlling whether to use multibyte characters. +* Language Environments:: Setting things up for the language you use. +* Input Methods:: Entering text characters not on your keyboard. +* Select Input Method:: Specifying your choice of input methods. +* Multibyte Conversion:: How single-byte characters convert to multibyte. +* Coding Systems:: Character set conversion when you read and + write files, and so on. +* Recognize Coding:: How Emacs figures out which conversion to use. +* Specify Coding:: Specifying a file's coding system explicitly. +* Output Coding:: Choosing coding systems for output. +* Text Coding:: Choosing conversion to use for file text. +* Communication Coding:: Coding systems for interprocess communication. +* File Name Coding:: Coding systems for file @emph{names}. +* Terminal Coding:: Specifying coding systems for converting + terminal input and output. +* Fontsets:: Fontsets are collections of fonts + that cover the whole spectrum of characters. +* Defining Fontsets:: Defining a new fontset. +* Undisplayable Characters:: When characters don't display. +* Unibyte Mode:: You can pick one European character set + to use without multibyte characters. +* Charsets:: How Emacs groups its internal character codes. +@end menu + +@node International Chars +@section Introduction to International Character Sets + + The users of international character sets and scripts have +established many more-or-less standard coding systems for storing +files. Emacs internally uses a single multibyte character encoding, +so that it can intermix characters from all these scripts in a single +buffer or string. This encoding represents each non-@acronym{ASCII} +character as a sequence of bytes in the range 0200 through 0377. +Emacs translates between the multibyte character encoding and various +other coding systems when reading and writing files, when exchanging +data with subprocesses, and (in some cases) in the @kbd{C-q} command +(@pxref{Multibyte Conversion}). + +@kindex C-h h +@findex view-hello-file +@cindex undisplayable characters +@cindex @samp{?} in display + The command @kbd{C-h h} (@code{view-hello-file}) displays the file +@file{etc/HELLO}, which shows how to say ``hello'' in many languages. +This illustrates various scripts. If some characters can't be +displayed on your terminal, they appear as @samp{?} or as hollow boxes +(@pxref{Undisplayable Characters}). + + Keyboards, even in the countries where these character sets are used, +generally don't have keys for all the characters in them. So Emacs +supports various @dfn{input methods}, typically one for each script or +language, to make it convenient to type them. + +@kindex C-x RET + The prefix key @kbd{C-x @key{RET}} is used for commands that pertain +to multibyte characters, coding systems, and input methods. + +@node Enabling Multibyte +@section Enabling Multibyte Characters + + By default, Emacs starts in multibyte mode, because that allows you to +use all the supported languages and scripts without limitations. + +@cindex turn multibyte support on or off + You can enable or disable multibyte character support, either for +Emacs as a whole, or for a single buffer. When multibyte characters +are disabled in a buffer, we call that @dfn{unibyte mode}. Then each +byte in that buffer represents a character, even codes 0200 through +0377. + + The old features for supporting the European character sets, ISO +Latin-1 and ISO Latin-2, work in unibyte mode as they did in Emacs 19 +and also work for the other ISO 8859 character sets. However, there +is no need to turn off multibyte character support to use ISO Latin; +the Emacs multibyte character set includes all the characters in these +character sets, and Emacs can translate automatically to and from the +ISO codes. + + To edit a particular file in unibyte representation, visit it using +@code{find-file-literally}. @xref{Visiting}. To convert a buffer in +multibyte representation into a single-byte representation of the same +characters, the easiest way is to save the contents in a file, kill the +buffer, and find the file again with @code{find-file-literally}. You +can also use @kbd{C-x @key{RET} c} +(@code{universal-coding-system-argument}) and specify @samp{raw-text} as +the coding system with which to find or save a file. @xref{Text +Coding}. Finding a file as @samp{raw-text} doesn't disable format +conversion, uncompression and auto mode selection as +@code{find-file-literally} does. + +@vindex enable-multibyte-characters +@vindex default-enable-multibyte-characters + To turn off multibyte character support by default, start Emacs with +the @samp{--unibyte} option (@pxref{Initial Options}), or set the +environment variable @env{EMACS_UNIBYTE}. You can also customize +@code{enable-multibyte-characters} or, equivalently, directly set the +variable @code{default-enable-multibyte-characters} to @code{nil} in +your init file to have basically the same effect as @samp{--unibyte}. + +@findex toggle-enable-multibyte-characters + To convert a unibyte session to a multibyte session, set +@code{default-enable-multibyte-characters} to @code{t}. Buffers which +were created in the unibyte session before you turn on multibyte support +will stay unibyte. You can turn on multibyte support in a specific +buffer by invoking the command @code{toggle-enable-multibyte-characters} +in that buffer. + +@cindex Lisp files, and multibyte operation +@cindex multibyte operation, and Lisp files +@cindex unibyte operation, and Lisp files +@cindex init file, and non-@acronym{ASCII} characters +@cindex environment variables, and non-@acronym{ASCII} characters + With @samp{--unibyte}, multibyte strings are not created during +initialization from the values of environment variables, +@file{/etc/passwd} entries etc.@: that contain non-@acronym{ASCII} 8-bit +characters. + + Emacs normally loads Lisp files as multibyte, regardless of whether +you used @samp{--unibyte}. This includes the Emacs initialization file, +@file{.emacs}, and the initialization files of Emacs packages such as +Gnus. However, you can specify unibyte loading for a particular Lisp +file, by putting @w{@samp{-*-unibyte: t;-*-}} in a comment on the first +line (@pxref{File Variables}). Then that file is always loaded as +unibyte text, even if you did not start Emacs with @samp{--unibyte}. +The motivation for these conventions is that it is more reliable to +always load any particular Lisp file in the same way. However, you can +load a Lisp file as unibyte, on any one occasion, by typing @kbd{C-x +@key{RET} c raw-text @key{RET}} immediately before loading it. + + The mode line indicates whether multibyte character support is +enabled in the current buffer. If it is, there are two or more +characters (most often two dashes) near the beginning of the mode +line, before the indication of the visited file's end-of-line +convention (colon, backslash, etc.). When multibyte characters +are not enabled, nothing precedes the colon except a single dash. +@xref{Mode Line}, for more details about this. + +@node Language Environments +@section Language Environments +@cindex language environments + + All supported character sets are supported in Emacs buffers whenever +multibyte characters are enabled; there is no need to select a +particular language in order to display its characters in an Emacs +buffer. However, it is important to select a @dfn{language environment} +in order to set various defaults. The language environment really +represents a choice of preferred script (more or less) rather than a +choice of language. + + The language environment controls which coding systems to recognize +when reading text (@pxref{Recognize Coding}). This applies to files, +incoming mail, netnews, and any other text you read into Emacs. It may +also specify the default coding system to use when you create a file. +Each language environment also specifies a default input method. + +@findex set-language-environment +@vindex current-language-environment + To select a language environment, you can customize the variable +@code{current-language-environment} or use the command @kbd{M-x +set-language-environment}. It makes no difference which buffer is +current when you use this command, because the effects apply globally to +the Emacs session. The supported language environments include: + +@cindex Euro sign +@cindex UTF-8 +@quotation +ASCII, Belarusian, Brazilian Portuguese, Bulgarian, Chinese-BIG5, +Chinese-CNS, Chinese-EUC-TW, Chinese-GB, Croatian, Cyrillic-ALT, +Cyrillic-ISO, Cyrillic-KOI8, Czech, Devanagari, Dutch, English, +Esperanto, Ethiopic, French, Georgian, German, Greek, Hebrew, IPA, +Italian, Japanese, Kannada, Korean, Lao, Latin-1, Latin-2, Latin-3, +Latin-4, Latin-5, Latin-6, Latin-7, Latin-8 (Celtic), Latin-9 (updated +Latin-1 with the Euro sign), Latvian, Lithuanian, Malayalam, Polish, +Romanian, Russian, Slovak, Slovenian, Spanish, Swedish, Tajik, Tamil, +Thai, Tibetan, Turkish, UTF-8 (for a setup which prefers Unicode +characters and files encoded in UTF-8), Ukrainian, Vietnamese, Welsh, +and Windows-1255 (for a setup which prefers Cyrillic characters and +files encoded in Windows-1255). +@tex +\hbadness=10000\par % just avoid underfull hbox warning +@end tex +@end quotation + +@cindex fonts for various scripts +@cindex Intlfonts package, installation + To display the script(s) used by your language environment on a +graphical display, you need to have a suitable font. If some of the +characters appear as empty boxes, you should install the GNU Intlfonts +package, which includes fonts for most supported scripts.@footnote{If +you run Emacs on X, you need to inform the X server about the location +of the newly installed fonts with the following commands: + +@example + xset fp+ /usr/local/share/emacs/fonts + xset fp rehash +@end example +} +@xref{Fontsets}, for more details about setting up your fonts. + +@findex set-locale-environment +@vindex locale-language-names +@vindex locale-charset-language-names +@cindex locales + Some operating systems let you specify the character-set locale you +are using by setting the locale environment variables @env{LC_ALL}, +@env{LC_CTYPE}, or @env{LANG}.@footnote{If more than one of these is +set, the first one that is nonempty specifies your locale for this +purpose.} During startup, Emacs looks up your character-set locale's +name in the system locale alias table, matches its canonical name +against entries in the value of the variables +@code{locale-charset-language-names} and @code{locale-language-names}, +and selects the corresponding language environment if a match is found. +(The former variable overrides the latter.) It also adjusts the display +table and terminal coding system, the locale coding system, the +preferred coding system as needed for the locale, and---last but not +least---the way Emacs decodes non-@acronym{ASCII} characters sent by your keyboard. + + If you modify the @env{LC_ALL}, @env{LC_CTYPE}, or @env{LANG} +environment variables while running Emacs, you may want to invoke the +@code{set-locale-environment} function afterwards to readjust the +language environment from the new locale. + +@vindex locale-preferred-coding-systems + The @code{set-locale-environment} function normally uses the preferred +coding system established by the language environment to decode system +messages. But if your locale matches an entry in the variable +@code{locale-preferred-coding-systems}, Emacs uses the corresponding +coding system instead. For example, if the locale @samp{ja_JP.PCK} +matches @code{japanese-shift-jis} in +@code{locale-preferred-coding-systems}, Emacs uses that encoding even +though it might normally use @code{japanese-iso-8bit}. + + You can override the language environment chosen at startup with +explicit use of the command @code{set-language-environment}, or with +customization of @code{current-language-environment} in your init +file. + +@kindex C-h L +@findex describe-language-environment + To display information about the effects of a certain language +environment @var{lang-env}, use the command @kbd{C-h L @var{lang-env} +@key{RET}} (@code{describe-language-environment}). This tells you +which languages this language environment is useful for, and lists the +character sets, coding systems, and input methods that go with it. It +also shows some sample text to illustrate scripts used in this +language environment. If you give an empty input for @var{lang-env}, +this command describes the chosen language environment. + +@vindex set-language-environment-hook + You can customize any language environment with the normal hook +@code{set-language-environment-hook}. The command +@code{set-language-environment} runs that hook after setting up the new +language environment. The hook functions can test for a specific +language environment by checking the variable +@code{current-language-environment}. This hook is where you should +put non-default settings for specific language environment, such as +coding systems for keyboard input and terminal output, the default +input method, etc. + +@vindex exit-language-environment-hook + Before it starts to set up the new language environment, +@code{set-language-environment} first runs the hook +@code{exit-language-environment-hook}. This hook is useful for undoing +customizations that were made with @code{set-language-environment-hook}. +For instance, if you set up a special key binding in a specific language +environment using @code{set-language-environment-hook}, you should set +up @code{exit-language-environment-hook} to restore the normal binding +for that key. + +@node Input Methods +@section Input Methods + +@cindex input methods + An @dfn{input method} is a kind of character conversion designed +specifically for interactive input. In Emacs, typically each language +has its own input method; sometimes several languages which use the same +characters can share one input method. A few languages support several +input methods. + + The simplest kind of input method works by mapping @acronym{ASCII} letters +into another alphabet; this allows you to use one other alphabet +instead of @acronym{ASCII}. The Greek and Russian input methods +work this way. + + A more powerful technique is composition: converting sequences of +characters into one letter. Many European input methods use composition +to produce a single non-@acronym{ASCII} letter from a sequence that consists of a +letter followed by accent characters (or vice versa). For example, some +methods convert the sequence @kbd{a'} into a single accented letter. +These input methods have no special commands of their own; all they do +is compose sequences of printing characters. + + The input methods for syllabic scripts typically use mapping followed +by composition. The input methods for Thai and Korean work this way. +First, letters are mapped into symbols for particular sounds or tone +marks; then, sequences of these which make up a whole syllable are +mapped into one syllable sign. + + Chinese and Japanese require more complex methods. In Chinese input +methods, first you enter the phonetic spelling of a Chinese word (in +input method @code{chinese-py}, among others), or a sequence of +portions of the character (input methods @code{chinese-4corner} and +@code{chinese-sw}, and others). One input sequence typically +corresponds to many possible Chinese characters. You select the one +you mean using keys such as @kbd{C-f}, @kbd{C-b}, @kbd{C-n}, +@kbd{C-p}, and digits, which have special meanings in this situation. + + The possible characters are conceptually arranged in several rows, +with each row holding up to 10 alternatives. Normally, Emacs displays +just one row at a time, in the echo area; @code{(@var{i}/@var{j})} +appears at the beginning, to indicate that this is the @var{i}th row +out of a total of @var{j} rows. Type @kbd{C-n} or @kbd{C-p} to +display the next row or the previous row. + + Type @kbd{C-f} and @kbd{C-b} to move forward and backward among +the alternatives in the current row. As you do this, Emacs highlights +the current alternative with a special color; type @code{C-@key{SPC}} +to select the current alternative and use it as input. The +alternatives in the row are also numbered; the number appears before +the alternative. Typing a digit @var{n} selects the @var{n}th +alternative of the current row and uses it as input. + + @key{TAB} in these Chinese input methods displays a buffer showing +all the possible characters at once; then clicking @kbd{Mouse-2} on +one of them selects that alternative. The keys @kbd{C-f}, @kbd{C-b}, +@kbd{C-n}, @kbd{C-p}, and digits continue to work as usual, but they +do the highlighting in the buffer showing the possible characters, +rather than in the echo area. + + In Japanese input methods, first you input a whole word using +phonetic spelling; then, after the word is in the buffer, Emacs +converts it into one or more characters using a large dictionary. One +phonetic spelling corresponds to a number of different Japanese words; +to select one of them, use @kbd{C-n} and @kbd{C-p} to cycle through +the alternatives. + + Sometimes it is useful to cut off input method processing so that the +characters you have just entered will not combine with subsequent +characters. For example, in input method @code{latin-1-postfix}, the +sequence @kbd{e '} combines to form an @samp{e} with an accent. What if +you want to enter them as separate characters? + + One way is to type the accent twice; this is a special feature for +entering the separate letter and accent. For example, @kbd{e ' '} gives +you the two characters @samp{e'}. Another way is to type another letter +after the @kbd{e}---something that won't combine with that---and +immediately delete it. For example, you could type @kbd{e e @key{DEL} +'} to get separate @samp{e} and @samp{'}. + + Another method, more general but not quite as easy to type, is to use +@kbd{C-\ C-\} between two characters to stop them from combining. This +is the command @kbd{C-\} (@code{toggle-input-method}) used twice. +@ifnottex +@xref{Select Input Method}. +@end ifnottex + +@cindex incremental search, input method interference + @kbd{C-\ C-\} is especially useful inside an incremental search, +because it stops waiting for more characters to combine, and starts +searching for what you have already entered. + + To find out how to input the character after point using the current +input method, type @kbd{C-u C-x =}. @xref{Position Info}. + +@vindex input-method-verbose-flag +@vindex input-method-highlight-flag + The variables @code{input-method-highlight-flag} and +@code{input-method-verbose-flag} control how input methods explain +what is happening. If @code{input-method-highlight-flag} is +non-@code{nil}, the partial sequence is highlighted in the buffer (for +most input methods---some disable this feature). If +@code{input-method-verbose-flag} is non-@code{nil}, the list of +possible characters to type next is displayed in the echo area (but +not when you are in the minibuffer). + +@node Select Input Method +@section Selecting an Input Method + +@table @kbd +@item C-\ +Enable or disable use of the selected input method. + +@item C-x @key{RET} C-\ @var{method} @key{RET} +Select a new input method for the current buffer. + +@item C-h I @var{method} @key{RET} +@itemx C-h C-\ @var{method} @key{RET} +@findex describe-input-method +@kindex C-h I +@kindex C-h C-\ +Describe the input method @var{method} (@code{describe-input-method}). +By default, it describes the current input method (if any). This +description should give you the full details of how to use any +particular input method. + +@item M-x list-input-methods +Display a list of all the supported input methods. +@end table + +@findex set-input-method +@vindex current-input-method +@kindex C-x RET C-\ + To choose an input method for the current buffer, use @kbd{C-x +@key{RET} C-\} (@code{set-input-method}). This command reads the +input method name from the minibuffer; the name normally starts with the +language environment that it is meant to be used with. The variable +@code{current-input-method} records which input method is selected. + +@findex toggle-input-method +@kindex C-\ + Input methods use various sequences of @acronym{ASCII} characters to +stand for non-@acronym{ASCII} characters. Sometimes it is useful to +turn off the input method temporarily. To do this, type @kbd{C-\} +(@code{toggle-input-method}). To reenable the input method, type +@kbd{C-\} again. + + If you type @kbd{C-\} and you have not yet selected an input method, +it prompts for you to specify one. This has the same effect as using +@kbd{C-x @key{RET} C-\} to specify an input method. + + When invoked with a numeric argument, as in @kbd{C-u C-\}, +@code{toggle-input-method} always prompts you for an input method, +suggesting the most recently selected one as the default. + +@vindex default-input-method + Selecting a language environment specifies a default input method for +use in various buffers. When you have a default input method, you can +select it in the current buffer by typing @kbd{C-\}. The variable +@code{default-input-method} specifies the default input method +(@code{nil} means there is none). + + In some language environments, which support several different input +methods, you might want to use an input method different from the +default chosen by @code{set-language-environment}. You can instruct +Emacs to select a different default input method for a certain +language environment, if you wish, by using +@code{set-language-environment-hook} (@pxref{Language Environments, +set-language-environment-hook}). For example: + +@lisp +(defun my-chinese-setup () + "Set up my private Chinese environment." + (if (equal current-language-environment "Chinese-GB") + (setq default-input-method "chinese-tonepy"))) +(add-hook 'set-language-environment-hook 'my-chinese-setup) +@end lisp + +@noindent +This sets the default input method to be @code{chinese-tonepy} +whenever you choose a Chinese-GB language environment. + +@findex quail-set-keyboard-layout + Some input methods for alphabetic scripts work by (in effect) +remapping the keyboard to emulate various keyboard layouts commonly used +for those scripts. How to do this remapping properly depends on your +actual keyboard layout. To specify which layout your keyboard has, use +the command @kbd{M-x quail-set-keyboard-layout}. + +@findex quail-show-key + You can use the command @kbd{M-x quail-show-key} to show what key (or +key sequence) to type in order to input the character following point, +using the selected keyboard layout. The command @kbd{C-u C-x =} also +shows that information in addition to the other information about the +character. + +@findex list-input-methods + To see a list of all the supported input methods, type @kbd{M-x +list-input-methods}. The list gives information about each input +method, including the string that stands for it in the mode line. + +@node Multibyte Conversion +@section Unibyte and Multibyte Non-@acronym{ASCII} characters + + When multibyte characters are enabled, character codes 0240 (octal) +through 0377 (octal) are not really legitimate in the buffer. The valid +non-@acronym{ASCII} printing characters have codes that start from 0400. + + If you type a self-inserting character in the range 0240 through +0377, or if you use @kbd{C-q} to insert one, Emacs assumes you +intended to use one of the ISO Latin-@var{n} character sets, and +converts it to the Emacs code representing that Latin-@var{n} +character. You select @emph{which} ISO Latin character set to use +through your choice of language environment +@iftex +(see above). +@end iftex +@ifnottex +(@pxref{Language Environments}). +@end ifnottex +If you do not specify a choice, the default is Latin-1. + + If you insert a character in the range 0200 through 0237, which +forms the @code{eight-bit-control} character set, it is inserted +literally. You should normally avoid doing this since buffers +containing such characters have to be written out in either the +@code{emacs-mule} or @code{raw-text} coding system, which is usually +not what you want. + +@node Coding Systems +@section Coding Systems +@cindex coding systems + + Users of various languages have established many more-or-less standard +coding systems for representing them. Emacs does not use these coding +systems internally; instead, it converts from various coding systems to +its own system when reading data, and converts the internal coding +system to other coding systems when writing data. Conversion is +possible in reading or writing files, in sending or receiving from the +terminal, and in exchanging data with subprocesses. + + Emacs assigns a name to each coding system. Most coding systems are +used for one language, and the name of the coding system starts with the +language name. Some coding systems are used for several languages; +their names usually start with @samp{iso}. There are also special +coding systems @code{no-conversion}, @code{raw-text} and +@code{emacs-mule} which do not convert printing characters at all. + +@cindex international files from DOS/Windows systems + A special class of coding systems, collectively known as +@dfn{codepages}, is designed to support text encoded by MS-Windows and +MS-DOS software. The names of these coding systems are +@code{cp@var{nnnn}}, where @var{nnnn} is a 3- or 4-digit number of the +codepage. You can use these encodings just like any other coding +system; for example, to visit a file encoded in codepage 850, type +@kbd{C-x @key{RET} c cp850 @key{RET} C-x C-f @var{filename} +@key{RET}}@footnote{ +In the MS-DOS port of Emacs, you need to create a @code{cp@var{nnn}} +coding system with @kbd{M-x codepage-setup}, before you can use it. +@iftex +@xref{MS-DOS and MULE,,,emacs-extra,Specialized Emacs Features}. +@end iftex +@ifnottex +@xref{MS-DOS and MULE}. +@end ifnottex +}. + + In addition to converting various representations of non-@acronym{ASCII} +characters, a coding system can perform end-of-line conversion. Emacs +handles three different conventions for how to separate lines in a file: +newline, carriage-return linefeed, and just carriage-return. + +@table @kbd +@item C-h C @var{coding} @key{RET} +Describe coding system @var{coding}. + +@item C-h C @key{RET} +Describe the coding systems currently in use. + +@item M-x list-coding-systems +Display a list of all the supported coding systems. +@end table + +@kindex C-h C +@findex describe-coding-system + The command @kbd{C-h C} (@code{describe-coding-system}) displays +information about particular coding systems, including the end-of-line +conversion specified by those coding systems. You can specify a coding +system name as the argument; alternatively, with an empty argument, it +describes the coding systems currently selected for various purposes, +both in the current buffer and as the defaults, and the priority list +for recognizing coding systems (@pxref{Recognize Coding}). + +@findex list-coding-systems + To display a list of all the supported coding systems, type @kbd{M-x +list-coding-systems}. The list gives information about each coding +system, including the letter that stands for it in the mode line +(@pxref{Mode Line}). + +@cindex end-of-line conversion +@cindex line endings +@cindex MS-DOS end-of-line conversion +@cindex Macintosh end-of-line conversion + Each of the coding systems that appear in this list---except for +@code{no-conversion}, which means no conversion of any kind---specifies +how and whether to convert printing characters, but leaves the choice of +end-of-line conversion to be decided based on the contents of each file. +For example, if the file appears to use the sequence carriage-return +linefeed to separate lines, DOS end-of-line conversion will be used. + + Each of the listed coding systems has three variants which specify +exactly what to do for end-of-line conversion: + +@table @code +@item @dots{}-unix +Don't do any end-of-line conversion; assume the file uses +newline to separate lines. (This is the convention normally used +on Unix and GNU systems.) + +@item @dots{}-dos +Assume the file uses carriage-return linefeed to separate lines, and do +the appropriate conversion. (This is the convention normally used on +Microsoft systems.@footnote{It is also specified for MIME @samp{text/*} +bodies and in other network transport contexts. It is different +from the SGML reference syntax record-start/record-end format which +Emacs doesn't support directly.}) + +@item @dots{}-mac +Assume the file uses carriage-return to separate lines, and do the +appropriate conversion. (This is the convention normally used on the +Macintosh system.) +@end table + + These variant coding systems are omitted from the +@code{list-coding-systems} display for brevity, since they are entirely +predictable. For example, the coding system @code{iso-latin-1} has +variants @code{iso-latin-1-unix}, @code{iso-latin-1-dos} and +@code{iso-latin-1-mac}. + +@cindex @code{undecided}, coding system + The coding systems @code{unix}, @code{dos}, and @code{mac} are +aliases for @code{undecided-unix}, @code{undecided-dos}, and +@code{undecided-mac}, respectively. These coding systems specify only +the end-of-line conversion, and leave the character code conversion to +be deduced from the text itself. + + The coding system @code{raw-text} is good for a file which is mainly +@acronym{ASCII} text, but may contain byte values above 127 which are +not meant to encode non-@acronym{ASCII} characters. With +@code{raw-text}, Emacs copies those byte values unchanged, and sets +@code{enable-multibyte-characters} to @code{nil} in the current buffer +so that they will be interpreted properly. @code{raw-text} handles +end-of-line conversion in the usual way, based on the data +encountered, and has the usual three variants to specify the kind of +end-of-line conversion to use. + + In contrast, the coding system @code{no-conversion} specifies no +character code conversion at all---none for non-@acronym{ASCII} byte values and +none for end of line. This is useful for reading or writing binary +files, tar files, and other files that must be examined verbatim. It, +too, sets @code{enable-multibyte-characters} to @code{nil}. + + The easiest way to edit a file with no conversion of any kind is with +the @kbd{M-x find-file-literally} command. This uses +@code{no-conversion}, and also suppresses other Emacs features that +might convert the file contents before you see them. @xref{Visiting}. + + The coding system @code{emacs-mule} means that the file contains +non-@acronym{ASCII} characters stored with the internal Emacs encoding. It +handles end-of-line conversion based on the data encountered, and has +the usual three variants to specify the kind of end-of-line conversion. + +@findex unify-8859-on-decoding-mode +@anchor{Character Translation} + The @dfn{character translation} feature can modify the effect of +various coding systems, by changing the internal Emacs codes that +decoding produces. For instance, the command +@code{unify-8859-on-decoding-mode} enables a mode that ``unifies'' the +Latin alphabets when decoding text. This works by converting all +non-@acronym{ASCII} Latin-@var{n} characters to either Latin-1 or +Unicode characters. This way it is easier to use various +Latin-@var{n} alphabets together. (In a future Emacs version we hope +to move towards full Unicode support and complete unification of +character sets.) + +@vindex enable-character-translation + If you set the variable @code{enable-character-translation} to +@code{nil}, that disables all character translation (including +@code{unify-8859-on-decoding-mode}). + +@node Recognize Coding +@section Recognizing Coding Systems + + Emacs tries to recognize which coding system to use for a given text +as an integral part of reading that text. (This applies to files +being read, output from subprocesses, text from X selections, etc.) +Emacs can select the right coding system automatically most of the +time---once you have specified your preferences. + + Some coding systems can be recognized or distinguished by which byte +sequences appear in the data. However, there are coding systems that +cannot be distinguished, not even potentially. For example, there is no +way to distinguish between Latin-1 and Latin-2; they use the same byte +values with different meanings. + + Emacs handles this situation by means of a priority list of coding +systems. Whenever Emacs reads a file, if you do not specify the coding +system to use, Emacs checks the data against each coding system, +starting with the first in priority and working down the list, until it +finds a coding system that fits the data. Then it converts the file +contents assuming that they are represented in this coding system. + + The priority list of coding systems depends on the selected language +environment (@pxref{Language Environments}). For example, if you use +French, you probably want Emacs to prefer Latin-1 to Latin-2; if you use +Czech, you probably want Latin-2 to be preferred. This is one of the +reasons to specify a language environment. + +@findex prefer-coding-system + However, you can alter the coding system priority list in detail +with the command @kbd{M-x prefer-coding-system}. This command reads +the name of a coding system from the minibuffer, and adds it to the +front of the priority list, so that it is preferred to all others. If +you use this command several times, each use adds one element to the +front of the priority list. + + If you use a coding system that specifies the end-of-line conversion +type, such as @code{iso-8859-1-dos}, what this means is that Emacs +should attempt to recognize @code{iso-8859-1} with priority, and should +use DOS end-of-line conversion when it does recognize @code{iso-8859-1}. + +@vindex file-coding-system-alist + Sometimes a file name indicates which coding system to use for the +file. The variable @code{file-coding-system-alist} specifies this +correspondence. There is a special function +@code{modify-coding-system-alist} for adding elements to this list. For +example, to read and write all @samp{.txt} files using the coding system +@code{chinese-iso-8bit}, you can execute this Lisp expression: + +@smallexample +(modify-coding-system-alist 'file "\\.txt\\'" 'chinese-iso-8bit) +@end smallexample + +@noindent +The first argument should be @code{file}, the second argument should be +a regular expression that determines which files this applies to, and +the third argument says which coding system to use for these files. + +@vindex inhibit-eol-conversion +@cindex DOS-style end-of-line display + Emacs recognizes which kind of end-of-line conversion to use based on +the contents of the file: if it sees only carriage-returns, or only +carriage-return linefeed sequences, then it chooses the end-of-line +conversion accordingly. You can inhibit the automatic use of +end-of-line conversion by setting the variable @code{inhibit-eol-conversion} +to non-@code{nil}. If you do that, DOS-style files will be displayed +with the @samp{^M} characters visible in the buffer; some people +prefer this to the more subtle @samp{(DOS)} end-of-line type +indication near the left edge of the mode line (@pxref{Mode Line, +eol-mnemonic}). + +@vindex inhibit-iso-escape-detection +@cindex escape sequences in files + By default, the automatic detection of coding system is sensitive to +escape sequences. If Emacs sees a sequence of characters that begin +with an escape character, and the sequence is valid as an ISO-2022 +code, that tells Emacs to use one of the ISO-2022 encodings to decode +the file. + + However, there may be cases that you want to read escape sequences +in a file as is. In such a case, you can set the variable +@code{inhibit-iso-escape-detection} to non-@code{nil}. Then the code +detection ignores any escape sequences, and never uses an ISO-2022 +encoding. The result is that all escape sequences become visible in +the buffer. + + The default value of @code{inhibit-iso-escape-detection} is +@code{nil}. We recommend that you not change it permanently, only for +one specific operation. That's because many Emacs Lisp source files +in the Emacs distribution contain non-@acronym{ASCII} characters encoded in the +coding system @code{iso-2022-7bit}, and they won't be +decoded correctly when you visit those files if you suppress the +escape sequence detection. + +@vindex auto-coding-alist +@vindex auto-coding-regexp-alist +@vindex auto-coding-functions + The variables @code{auto-coding-alist}, +@code{auto-coding-regexp-alist} and @code{auto-coding-functions} are +the strongest way to specify the coding system for certain patterns of +file names, or for files containing certain patterns; these variables +even override @samp{-*-coding:-*-} tags in the file itself. Emacs +uses @code{auto-coding-alist} for tar and archive files, to prevent it +from being confused by a @samp{-*-coding:-*-} tag in a member of the +archive and thinking it applies to the archive file as a whole. +Likewise, Emacs uses @code{auto-coding-regexp-alist} to ensure that +RMAIL files, whose names in general don't match any particular +pattern, are decoded correctly. One of the builtin +@code{auto-coding-functions} detects the encoding for XML files. + +@vindex rmail-decode-mime-charset + When you get new mail in Rmail, each message is translated +automatically from the coding system it is written in, as if it were a +separate file. This uses the priority list of coding systems that you +have specified. If a MIME message specifies a character set, Rmail +obeys that specification, unless @code{rmail-decode-mime-charset} is +@code{nil}. + +@vindex rmail-file-coding-system + For reading and saving Rmail files themselves, Emacs uses the coding +system specified by the variable @code{rmail-file-coding-system}. The +default value is @code{nil}, which means that Rmail files are not +translated (they are read and written in the Emacs internal character +code). + +@node Specify Coding +@section Specifying a File's Coding System + + If Emacs recognizes the encoding of a file incorrectly, you can +reread the file using the correct coding system by typing @kbd{C-x +@key{RET} r @var{coding-system} @key{RET}}. To see what coding system +Emacs actually used to decode the file, look at the coding system +mnemonic letter near the left edge of the mode line (@pxref{Mode +Line}), or type @kbd{C-h C @key{RET}}. + +@vindex coding + You can specify the coding system for a particular file in the file +itself, using the @w{@samp{-*-@dots{}-*-}} construct at the beginning, +or a local variables list at the end (@pxref{File Variables}). You do +this by defining a value for the ``variable'' named @code{coding}. +Emacs does not really have a variable @code{coding}; instead of +setting a variable, this uses the specified coding system for the +file. For example, @samp{-*-mode: C; coding: latin-1;-*-} specifies +use of the Latin-1 coding system, as well as C mode. When you specify +the coding explicitly in the file, that overrides +@code{file-coding-system-alist}. + + If you add the character @samp{!} at the end of the coding system +name in @code{coding}, it disables any character translation +(@pxref{Character Translation}) while decoding the file. This is +useful when you need to make sure that the character codes in the +Emacs buffer will not vary due to changes in user settings; for +instance, for the sake of strings in Emacs Lisp source files. + +@node Output Coding +@section Choosing Coding Systems for Output + +@vindex buffer-file-coding-system + Once Emacs has chosen a coding system for a buffer, it stores that +coding system in @code{buffer-file-coding-system}. That makes it the +default for operations that write from this buffer into a file, such +as @code{save-buffer} and @code{write-region}. You can specify a +different coding system for further file output from the buffer using +@code{set-buffer-file-coding-system} (@pxref{Text Coding}). + + You can insert any character Emacs supports into any Emacs buffer, +but most coding systems can only handle a subset of these characters. +Therefore, you can insert characters that cannot be encoded with the +coding system that will be used to save the buffer. For example, you +could start with an @acronym{ASCII} file and insert a few Latin-1 +characters into it, or you could edit a text file in Polish encoded in +@code{iso-8859-2} and add some Russian words to it. When you save +that buffer, Emacs cannot use the current value of +@code{buffer-file-coding-system}, because the characters you added +cannot be encoded by that coding system. + + When that happens, Emacs tries the most-preferred coding system (set +by @kbd{M-x prefer-coding-system} or @kbd{M-x +set-language-environment}), and if that coding system can safely +encode all of the characters in the buffer, Emacs uses it, and stores +its value in @code{buffer-file-coding-system}. Otherwise, Emacs +displays a list of coding systems suitable for encoding the buffer's +contents, and asks you to choose one of those coding systems. + + If you insert the unsuitable characters in a mail message, Emacs +behaves a bit differently. It additionally checks whether the +most-preferred coding system is recommended for use in MIME messages; +if not, Emacs tells you that the most-preferred coding system is not +recommended and prompts you for another coding system. This is so you +won't inadvertently send a message encoded in a way that your +recipient's mail software will have difficulty decoding. (You can +still use an unsuitable coding system if you type its name in response +to the question.) + +@vindex sendmail-coding-system + When you send a message with Mail mode (@pxref{Sending Mail}), Emacs has +four different ways to determine the coding system to use for encoding +the message text. It tries the buffer's own value of +@code{buffer-file-coding-system}, if that is non-@code{nil}. Otherwise, +it uses the value of @code{sendmail-coding-system}, if that is +non-@code{nil}. The third way is to use the default coding system for +new files, which is controlled by your choice of language environment, +if that is non-@code{nil}. If all of these three values are @code{nil}, +Emacs encodes outgoing mail using the Latin-1 coding system. + +@node Text Coding +@section Specifying a Coding System for File Text + + In cases where Emacs does not automatically choose the right coding +system for a file's contents, you can use these commands to specify +one: + +@table @kbd +@item C-x @key{RET} f @var{coding} @key{RET} +Use coding system @var{coding} for saving or revisiting the visited +file in the current buffer. + +@item C-x @key{RET} c @var{coding} @key{RET} +Specify coding system @var{coding} for the immediately following +command. + +@item C-x @key{RET} r @var{coding} @key{RET} +Revisit the current file using the coding system @var{coding}. + +@item M-x recode-region @key{RET} @var{right} @key{RET} @var{wrong} @key{RET} +Convert a region that was decoded using coding system @var{wrong}, +decoding it using coding system @var{right} instead. +@end table + +@kindex C-x RET f +@findex set-buffer-file-coding-system + The command @kbd{C-x @key{RET} f} +(@code{set-buffer-file-coding-system}) sets the file coding system for +the current buffer---in other words, it says which coding system to +use when saving or reverting the visited file. You specify which +coding system using the minibuffer. If you specify a coding system +that cannot handle all of the characters in the buffer, Emacs warns +you about the troublesome characters when you actually save the +buffer. + +@cindex specify end-of-line conversion + You can also use this command to specify the end-of-line conversion +(@pxref{Coding Systems, end-of-line conversion}) for encoding the +current buffer. For example, @kbd{C-x @key{RET} f dos @key{RET}} will +cause Emacs to save the current buffer's text with DOS-style CRLF line +endings. + +@kindex C-x RET c +@findex universal-coding-system-argument + Another way to specify the coding system for a file is when you visit +the file. First use the command @kbd{C-x @key{RET} c} +(@code{universal-coding-system-argument}); this command uses the +minibuffer to read a coding system name. After you exit the minibuffer, +the specified coding system is used for @emph{the immediately following +command}. + + So if the immediately following command is @kbd{C-x C-f}, for example, +it reads the file using that coding system (and records the coding +system for when you later save the file). Or if the immediately following +command is @kbd{C-x C-w}, it writes the file using that coding system. +When you specify the coding system for saving in this way, instead +of with @kbd{C-x @key{RET} f}, there is no warning if the buffer +contains characters that the coding system cannot handle. + + Other file commands affected by a specified coding system include +@kbd{C-x i} and @kbd{C-x C-v}, as well as the other-window variants +of @kbd{C-x C-f}. @kbd{C-x @key{RET} c} also affects commands that +start subprocesses, including @kbd{M-x shell} (@pxref{Shell}). If the +immediately following command does not use the coding system, then +@kbd{C-x @key{RET} c} ultimately has no effect. + + An easy way to visit a file with no conversion is with the @kbd{M-x +find-file-literally} command. @xref{Visiting}. + +@vindex default-buffer-file-coding-system + The variable @code{default-buffer-file-coding-system} specifies the +choice of coding system to use when you create a new file. It applies +when you find a new file, and when you create a buffer and then save it +in a file. Selecting a language environment typically sets this +variable to a good choice of default coding system for that language +environment. + +@kindex C-x RET r +@findex revert-buffer-with-coding-system + If you visit a file with a wrong coding system, you can correct this +with @kbd{C-x @key{RET} r} (@code{revert-buffer-with-coding-system}). +This visits the current file again, using a coding system you specify. + +@findex recode-region + If a piece of text has already been inserted into a buffer using the +wrong coding system, you can redo the decoding of it using @kbd{M-x +recode-region}. This prompts you for the proper coding system, then +for the wrong coding system that was actually used, and does the +conversion. It first encodes the region using the wrong coding system, +then decodes it again using the proper coding system. + +@node Communication Coding +@section Coding Systems for Interprocess Communication + + This section explains how to specify coding systems for use +in communication with other processes. + +@table @kbd +@item C-x @key{RET} x @var{coding} @key{RET} +Use coding system @var{coding} for transferring selections to and from +other window-based applications. + +@item C-x @key{RET} X @var{coding} @key{RET} +Use coding system @var{coding} for transferring @emph{one} +selection---the next one---to or from another window-based application. + +@item C-x @key{RET} p @var{input-coding} @key{RET} @var{output-coding} @key{RET} +Use coding systems @var{input-coding} and @var{output-coding} for +subprocess input and output in the current buffer. + +@item C-x @key{RET} c @var{coding} @key{RET} +Specify coding system @var{coding} for the immediately following +command. +@end table + +@kindex C-x RET x +@kindex C-x RET X +@findex set-selection-coding-system +@findex set-next-selection-coding-system + The command @kbd{C-x @key{RET} x} (@code{set-selection-coding-system}) +specifies the coding system for sending selected text to other windowing +applications, and for receiving the text of selections made in other +applications. This command applies to all subsequent selections, until +you override it by using the command again. The command @kbd{C-x +@key{RET} X} (@code{set-next-selection-coding-system}) specifies the +coding system for the next selection made in Emacs or read by Emacs. + +@kindex C-x RET p +@findex set-buffer-process-coding-system + The command @kbd{C-x @key{RET} p} (@code{set-buffer-process-coding-system}) +specifies the coding system for input and output to a subprocess. This +command applies to the current buffer; normally, each subprocess has its +own buffer, and thus you can use this command to specify translation to +and from a particular subprocess by giving the command in the +corresponding buffer. + + You can also use @kbd{C-x @key{RET} c} just before the command that +runs or starts a subprocess, to specify the coding system to use for +communication with that subprocess. + + The default for translation of process input and output depends on the +current language environment. + +@vindex locale-coding-system +@cindex decoding non-@acronym{ASCII} keyboard input on X + The variable @code{locale-coding-system} specifies a coding system +to use when encoding and decoding system strings such as system error +messages and @code{format-time-string} formats and time stamps. That +coding system is also used for decoding non-@acronym{ASCII} keyboard input on X +Window systems. You should choose a coding system that is compatible +with the underlying system's text representation, which is normally +specified by one of the environment variables @env{LC_ALL}, +@env{LC_CTYPE}, and @env{LANG}. (The first one, in the order +specified above, whose value is nonempty is the one that determines +the text representation.) + +@node File Name Coding +@section Coding Systems for File Names + +@table @kbd +@item C-x @key{RET} F @var{coding} @key{RET} +Use coding system @var{coding} for encoding and decoding file +@emph{names}. +@end table + +@vindex file-name-coding-system +@cindex file names with non-@acronym{ASCII} characters + The variable @code{file-name-coding-system} specifies a coding +system to use for encoding file names. It has no effect on reading +and writing the @emph{contents} of files. + +@findex set-file-name-coding-system +@kindex C-x @key{RET} F + If you set the variable to a coding system name (as a Lisp symbol or +a string), Emacs encodes file names using that coding system for all +file operations. This makes it possible to use non-@acronym{ASCII} +characters in file names---or, at least, those non-@acronym{ASCII} +characters which the specified coding system can encode. Use @kbd{C-x +@key{RET} F} (@code{set-file-name-coding-system}) to specify this +interactively. + + If @code{file-name-coding-system} is @code{nil}, Emacs uses a +default coding system determined by the selected language environment. +In the default language environment, any non-@acronym{ASCII} +characters in file names are not encoded specially; they appear in the +file system using the internal Emacs representation. + + @strong{Warning:} if you change @code{file-name-coding-system} (or the +language environment) in the middle of an Emacs session, problems can +result if you have already visited files whose names were encoded using +the earlier coding system and cannot be encoded (or are encoded +differently) under the new coding system. If you try to save one of +these buffers under the visited file name, saving may use the wrong file +name, or it may get an error. If such a problem happens, use @kbd{C-x +C-w} to specify a new file name for that buffer. + +@findex recode-file-name + If a mistake occurs when encoding a file name, use the command +@kbd{M-x recode-file-name} to change the file name's coding +system. This prompts for an existing file name, its old coding +system, and the coding system to which you wish to convert. + +@node Terminal Coding +@section Coding Systems for Terminal I/O + +@table @kbd +@item C-x @key{RET} k @var{coding} @key{RET} +Use coding system @var{coding} for keyboard input. + +@item C-x @key{RET} t @var{coding} @key{RET} +Use coding system @var{coding} for terminal output. +@end table + +@kindex C-x RET t +@findex set-terminal-coding-system + The command @kbd{C-x @key{RET} t} (@code{set-terminal-coding-system}) +specifies the coding system for terminal output. If you specify a +character code for terminal output, all characters output to the +terminal are translated into that coding system. + + This feature is useful for certain character-only terminals built to +support specific languages or character sets---for example, European +terminals that support one of the ISO Latin character sets. You need to +specify the terminal coding system when using multibyte text, so that +Emacs knows which characters the terminal can actually handle. + + By default, output to the terminal is not translated at all, unless +Emacs can deduce the proper coding system from your terminal type or +your locale specification (@pxref{Language Environments}). + +@kindex C-x RET k +@findex set-keyboard-coding-system +@vindex keyboard-coding-system + The command @kbd{C-x @key{RET} k} (@code{set-keyboard-coding-system}) +or the variable @code{keyboard-coding-system} specifies the coding +system for keyboard input. Character-code translation of keyboard +input is useful for terminals with keys that send non-@acronym{ASCII} +graphic characters---for example, some terminals designed for ISO +Latin-1 or subsets of it. + + By default, keyboard input is translated based on your system locale +setting. If your terminal does not really support the encoding +implied by your locale (for example, if you find it inserts a +non-@acronym{ASCII} character if you type @kbd{M-i}), you will need to set +@code{keyboard-coding-system} to @code{nil} to turn off encoding. +You can do this by putting + +@lisp +(set-keyboard-coding-system nil) +@end lisp + +@noindent +in your @file{~/.emacs} file. + + There is a similarity between using a coding system translation for +keyboard input, and using an input method: both define sequences of +keyboard input that translate into single characters. However, input +methods are designed to be convenient for interactive use by humans, and +the sequences that are translated are typically sequences of @acronym{ASCII} +printing characters. Coding systems typically translate sequences of +non-graphic characters. + +@node Fontsets +@section Fontsets +@cindex fontsets + + A font typically defines shapes for a single alphabet or script. +Therefore, displaying the entire range of scripts that Emacs supports +requires a collection of many fonts. In Emacs, such a collection is +called a @dfn{fontset}. A fontset is defined by a list of fonts, each +assigned to handle a range of character codes. + + Each fontset has a name, like a font. However, while fonts are +stored in the system and the available font names are defined by the +system, fontsets are defined within Emacs itself. Once you have +defined a fontset, you can use it within Emacs by specifying its name, +anywhere that you could use a single font. Of course, Emacs fontsets +can use only the fonts that the system supports; if certain characters +appear on the screen as hollow boxes, this means that the fontset in +use for them has no font for those characters.@footnote{The Emacs +installation instructions have information on additional font +support.} + + Emacs creates two fontsets automatically: the @dfn{standard fontset} +and the @dfn{startup fontset}. The standard fontset is most likely to +have fonts for a wide variety of non-@acronym{ASCII} characters; +however, this is not the default for Emacs to use. (By default, Emacs +tries to find a font that has bold and italic variants.) You can +specify use of the standard fontset with the @samp{-fn} option. For +example, + +@example +emacs -fn fontset-standard +@end example + +@noindent +You can also specify a fontset with the @samp{Font} resource (@pxref{X +Resources}). + + A fontset does not necessarily specify a font for every character +code. If a fontset specifies no font for a certain character, or if it +specifies a font that does not exist on your system, then it cannot +display that character properly. It will display that character as an +empty box instead. + +@node Defining Fontsets +@section Defining fontsets + +@vindex standard-fontset-spec +@cindex standard fontset + Emacs creates a standard fontset automatically according to the value +of @code{standard-fontset-spec}. This fontset's name is + +@example +-*-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-standard +@end example + +@noindent +or just @samp{fontset-standard} for short. + + Bold, italic, and bold-italic variants of the standard fontset are +created automatically. Their names have @samp{bold} instead of +@samp{medium}, or @samp{i} instead of @samp{r}, or both. + +@cindex startup fontset + If you specify a default @acronym{ASCII} font with the @samp{Font} resource or +the @samp{-fn} argument, Emacs generates a fontset from it +automatically. This is the @dfn{startup fontset} and its name is +@code{fontset-startup}. It does this by replacing the @var{foundry}, +@var{family}, @var{add_style}, and @var{average_width} fields of the +font name with @samp{*}, replacing @var{charset_registry} field with +@samp{fontset}, and replacing @var{charset_encoding} field with +@samp{startup}, then using the resulting string to specify a fontset. + + For instance, if you start Emacs this way, + +@example +emacs -fn "*courier-medium-r-normal--14-140-*-iso8859-1" +@end example + +@noindent +Emacs generates the following fontset and uses it for the initial X +window frame: + +@example +-*-*-medium-r-normal-*-14-140-*-*-*-*-fontset-startup +@end example + + With the X resource @samp{Emacs.Font}, you can specify a fontset name +just like an actual font name. But be careful not to specify a fontset +name in a wildcard resource like @samp{Emacs*Font}---that wildcard +specification matches various other resources, such as for menus, and +menus cannot handle fontsets. + + You can specify additional fontsets using X resources named +@samp{Fontset-@var{n}}, where @var{n} is an integer starting from 0. +The resource value should have this form: + +@smallexample +@var{fontpattern}, @r{[}@var{charset}:@var{font}@r{]@dots{}} +@end smallexample + +@noindent +@var{fontpattern} should have the form of a standard X font name, except +for the last two fields. They should have the form +@samp{fontset-@var{alias}}. + + The fontset has two names, one long and one short. The long name is +@var{fontpattern}. The short name is @samp{fontset-@var{alias}}. You +can refer to the fontset by either name. + + The construct @samp{@var{charset}:@var{font}} specifies which font to +use (in this fontset) for one particular character set. Here, +@var{charset} is the name of a character set, and @var{font} is the +font to use for that character set. You can use this construct any +number of times in defining one fontset. + + For the other character sets, Emacs chooses a font based on +@var{fontpattern}. It replaces @samp{fontset-@var{alias}} with values +that describe the character set. For the @acronym{ASCII} character font, +@samp{fontset-@var{alias}} is replaced with @samp{ISO8859-1}. + + In addition, when several consecutive fields are wildcards, Emacs +collapses them into a single wildcard. This is to prevent use of +auto-scaled fonts. Fonts made by scaling larger fonts are not usable +for editing, and scaling a smaller font is not useful because it is +better to use the smaller font in its own size, which is what Emacs +does. + + Thus if @var{fontpattern} is this, + +@example +-*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24 +@end example + +@noindent +the font specification for @acronym{ASCII} characters would be this: + +@example +-*-fixed-medium-r-normal-*-24-*-ISO8859-1 +@end example + +@noindent +and the font specification for Chinese GB2312 characters would be this: + +@example +-*-fixed-medium-r-normal-*-24-*-gb2312*-* +@end example + + You may not have any Chinese font matching the above font +specification. Most X distributions include only Chinese fonts that +have @samp{song ti} or @samp{fangsong ti} in @var{family} field. In +such a case, @samp{Fontset-@var{n}} can be specified as below: + +@smallexample +Emacs.Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24,\ + chinese-gb2312:-*-*-medium-r-normal-*-24-*-gb2312*-* +@end smallexample + +@noindent +Then, the font specifications for all but Chinese GB2312 characters have +@samp{fixed} in the @var{family} field, and the font specification for +Chinese GB2312 characters has a wild card @samp{*} in the @var{family} +field. + +@findex create-fontset-from-fontset-spec + The function that processes the fontset resource value to create the +fontset is called @code{create-fontset-from-fontset-spec}. You can also +call this function explicitly to create a fontset. + + @xref{Font X}, for more information about font naming in X. + +@node Undisplayable Characters +@section Undisplayable Characters + + There may be a some non-@acronym{ASCII} characters that your terminal cannot +display. Most text-only terminals support just a single character +set (use the variable @code{default-terminal-coding-system} +(@pxref{Terminal Coding}) to tell Emacs which one); characters which +can't be encoded in that coding system are displayed as @samp{?} by +default. + + Graphical displays can display a broader range of characters, but +you may not have fonts installed for all of them; characters that have +no font appear as a hollow box. + + If you use Latin-1 characters but your terminal can't display +Latin-1, you can arrange to display mnemonic @acronym{ASCII} sequences +instead, e.g.@: @samp{"o} for o-umlaut. Load the library +@file{iso-ascii} to do this. + +@vindex latin1-display + If your terminal can display Latin-1, you can display characters +from other European character sets using a mixture of equivalent +Latin-1 characters and @acronym{ASCII} mnemonics. Customize the variable +@code{latin1-display} to enable this. The mnemonic @acronym{ASCII} +sequences mostly correspond to those of the prefix input methods. + +@node Unibyte Mode +@section Unibyte Editing Mode + +@cindex European character sets +@cindex accented characters +@cindex ISO Latin character sets +@cindex Unibyte operation + The ISO 8859 Latin-@var{n} character sets define character codes in +the range 0240 to 0377 octal (160 to 255 decimal) to handle the +accented letters and punctuation needed by various European languages +(and some non-European ones). If you disable multibyte characters, +Emacs can still handle @emph{one} of these character codes at a time. +To specify @emph{which} of these codes to use, invoke @kbd{M-x +set-language-environment} and specify a suitable language environment +such as @samp{Latin-@var{n}}. + + For more information about unibyte operation, see @ref{Enabling +Multibyte}. Note particularly that you probably want to ensure that +your initialization files are read as unibyte if they contain +non-@acronym{ASCII} characters. + +@vindex unibyte-display-via-language-environment + Emacs can also display those characters, provided the terminal or font +in use supports them. This works automatically. Alternatively, on a +graphical display, Emacs can also display single-byte characters +through fontsets, in effect by displaying the equivalent multibyte +characters according to the current language environment. To request +this, set the variable @code{unibyte-display-via-language-environment} +to a non-@code{nil} value. + +@cindex @code{iso-ascii} library + If your terminal does not support display of the Latin-1 character +set, Emacs can display these characters as @acronym{ASCII} sequences which at +least give you a clear idea of what the characters are. To do this, +load the library @code{iso-ascii}. Similar libraries for other +Latin-@var{n} character sets could be implemented, but we don't have +them yet. + +@findex standard-display-8bit +@cindex 8-bit display + Normally non-ISO-8859 characters (decimal codes between 128 and 159 +inclusive) are displayed as octal escapes. You can change this for +non-standard ``extended'' versions of ISO-8859 character sets by using the +function @code{standard-display-8bit} in the @code{disp-table} library. + + There are two ways to input single-byte non-@acronym{ASCII} +characters: + +@itemize @bullet +@cindex 8-bit input +@item +You can use an input method for the selected language environment. +@xref{Input Methods}. When you use an input method in a unibyte buffer, +the non-@acronym{ASCII} character you specify with it is converted to unibyte. + +@item +If your keyboard can generate character codes 128 (decimal) and up, +representing non-@acronym{ASCII} characters, you can type those character codes +directly. + +On a graphical display, you should not need to do anything special to use +these keys; they should simply work. On a text-only terminal, you +should use the command @code{M-x set-keyboard-coding-system} or the +variable @code{keyboard-coding-system} to specify which coding system +your keyboard uses (@pxref{Terminal Coding}). Enabling this feature +will probably require you to use @kbd{ESC} to type Meta characters; +however, on a console terminal or in @code{xterm}, you can arrange for +Meta to be converted to @kbd{ESC} and still be able type 8-bit +characters present directly on the keyboard or using @kbd{Compose} or +@kbd{AltGr} keys. @xref{User Input}. + +@kindex C-x 8 +@cindex @code{iso-transl} library +@cindex compose character +@cindex dead character +@item +For Latin-1 only, you can use the key @kbd{C-x 8} as a ``compose +character'' prefix for entry of non-@acronym{ASCII} Latin-1 printing +characters. @kbd{C-x 8} is good for insertion (in the minibuffer as +well as other buffers), for searching, and in any other context where +a key sequence is allowed. + +@kbd{C-x 8} works by loading the @code{iso-transl} library. Once that +library is loaded, the @key{ALT} modifier key, if the keyboard has +one, serves the same purpose as @kbd{C-x 8}: use @key{ALT} together +with an accent character to modify the following letter. In addition, +if the keyboard has keys for the Latin-1 ``dead accent characters,'' +they too are defined to compose with the following character, once +@code{iso-transl} is loaded. + +Use @kbd{C-x 8 C-h} to list all the available @kbd{C-x 8} translations. +@end itemize + +@node Charsets +@section Charsets +@cindex charsets + + Emacs groups all supported characters into disjoint @dfn{charsets}. +Each character code belongs to one and only one charset. For +historical reasons, Emacs typically divides an 8-bit character code +for an extended version of @acronym{ASCII} into two charsets: +@acronym{ASCII}, which covers the codes 0 through 127, plus another +charset which covers the ``right-hand part'' (the codes 128 and up). +For instance, the characters of Latin-1 include the Emacs charset +@code{ascii} plus the Emacs charset @code{latin-iso8859-1}. + + Emacs characters belonging to different charsets may look the same, +but they are still different characters. For example, the letter +@samp{o} with acute accent in charset @code{latin-iso8859-1}, used for +Latin-1, is different from the letter @samp{o} with acute accent in +charset @code{latin-iso8859-2}, used for Latin-2. + +@findex list-charset-chars +@cindex characters in a certain charset +@findex describe-character-set + There are two commands for obtaining information about Emacs +charsets. The command @kbd{M-x list-charset-chars} prompts for a name +of a character set, and displays all the characters in that character +set. The command @kbd{M-x describe-character-set} prompts for a +charset name and displays information about that charset, including +its internal representation within Emacs. + + To find out which charset a character in the buffer belongs to, +put point before it and type @kbd{C-u C-x =}. + +@ignore + arch-tag: 310ba60d-31ef-4ce7-91f1-f282dd57b6b3 +@end ignore diff --git a/doc/emacs/picture-xtra.texi b/doc/emacs/picture-xtra.texi new file mode 100644 index 00000000000..ad3b9f27cc5 --- /dev/null +++ b/doc/emacs/picture-xtra.texi @@ -0,0 +1,291 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@c +@c This file is included either in emacs-xtra.texi (when producing the +@c printed version) or in the main Emacs manual (for the on-line version). +@node Picture Mode +@chapter Editing Pictures +@cindex pictures +@cindex making pictures out of text characters +@findex edit-picture + + To edit a picture made out of text characters (for example, a picture +of the division of a register into fields, as a comment in a program), +use the command @kbd{M-x edit-picture} to enter Picture mode. + + In Picture mode, editing is based on the @dfn{quarter-plane} model of +text, according to which the text characters lie studded on an area that +stretches infinitely far to the right and downward. The concept of the end +of a line does not exist in this model; the most you can say is where the +last nonblank character on the line is found. + + Of course, Emacs really always considers text as a sequence of +characters, and lines really do have ends. But Picture mode replaces +the most frequently-used commands with variants that simulate the +quarter-plane model of text. They do this by inserting spaces or by +converting tabs to spaces. + + Most of the basic editing commands of Emacs are redefined by Picture mode +to do essentially the same thing but in a quarter-plane way. In addition, +Picture mode defines various keys starting with the @kbd{C-c} prefix to +run special picture editing commands. + + One of these keys, @kbd{C-c C-c}, is particularly important. Often a +picture is part of a larger file that is usually edited in some other +major mode. @kbd{M-x edit-picture} records the name of the previous +major mode so you can use the @kbd{C-c C-c} command +(@code{picture-mode-exit}) later to go back to that mode. @kbd{C-c C-c} +also deletes spaces from the ends of lines, unless given a numeric +argument. + + The special commands of Picture mode all work in other modes (provided +the @file{picture} library is loaded), but are not bound to keys except +in Picture mode. The descriptions below talk of moving ``one column'' +and so on, but all the picture mode commands handle numeric arguments as +their normal equivalents do. + +@vindex picture-mode-hook + Turning on Picture mode runs the hook @code{picture-mode-hook}. +Additional extensions to Picture mode can be found in +@file{artist.el}. + +@menu +* Basic Picture:: Basic concepts and simple commands of Picture Mode. +* Insert in Picture:: Controlling direction of cursor motion + after "self-inserting" characters. +* Tabs in Picture:: Various features for tab stops and indentation. +* Rectangles in Picture:: Clearing and superimposing rectangles. +@end menu + +@node Basic Picture +@section Basic Editing in Picture Mode + +@findex picture-forward-column +@findex picture-backward-column +@findex picture-move-down +@findex picture-move-up +@cindex editing in Picture mode + + Most keys do the same thing in Picture mode that they usually do, but +do it in a quarter-plane style. For example, @kbd{C-f} is rebound to +run @code{picture-forward-column}, a command which moves point one +column to the right, inserting a space if necessary so that the actual +end of the line makes no difference. @kbd{C-b} is rebound to run +@code{picture-backward-column}, which always moves point left one +column, converting a tab to multiple spaces if necessary. @kbd{C-n} and +@kbd{C-p} are rebound to run @code{picture-move-down} and +@code{picture-move-up}, which can either insert spaces or convert tabs +as necessary to make sure that point stays in exactly the same column. +@kbd{C-e} runs @code{picture-end-of-line}, which moves to after the last +nonblank character on the line. There is no need to change @kbd{C-a}, +as the choice of screen model does not affect beginnings of +lines. + +@findex picture-newline + Insertion of text is adapted to the quarter-plane screen model +through the use of Overwrite mode +@iftex +(@pxref{Minor Modes,,, emacs, the Emacs Manual}.) +@end iftex +@ifnottex +(@pxref{Minor Modes}.) +@end ifnottex +Self-inserting characters replace existing text, column by column, +rather than pushing existing text to the right. @key{RET} runs +@code{picture-newline}, which just moves to the beginning of the +following line so that new text will replace that line. + +@findex picture-backward-clear-column +@findex picture-clear-column +@findex picture-clear-line + In Picture mode, the commands that normally delete or kill text, +instead erase text (replacing it with spaces). @key{DEL} +(@code{picture-backward-clear-column}) replaces the preceding +character with a space rather than removing it; this moves point +backwards. @kbd{C-d} (@code{picture-clear-column}) replaces the next +character or characters with spaces, but does not move point. (If you +want to clear characters to spaces and move forward over them, use +@key{SPC}.) @kbd{C-k} (@code{picture-clear-line}) really kills the +contents of lines, but does not delete the newlines from the buffer. + +@findex picture-open-line + To do actual insertion, you must use special commands. @kbd{C-o} +(@code{picture-open-line}) creates a blank line after the current +line; it never splits a line. @kbd{C-M-o} (@code{split-line}) makes +sense in Picture mode, so it is not changed. @kbd{C-j} +(@code{picture-duplicate-line}) inserts another line with the same +contents below the current line. + +@kindex C-c C-d @r{(Picture mode)} + To do actual deletion in Picture mode, use @kbd{C-w}, @kbd{C-c C-d} +(which is defined as @code{delete-char}, as @kbd{C-d} is in other +modes), or one of the picture rectangle commands (@pxref{Rectangles in +Picture}). + +@node Insert in Picture +@section Controlling Motion after Insert + +@findex picture-movement-up +@findex picture-movement-down +@findex picture-movement-left +@findex picture-movement-right +@findex picture-movement-nw +@findex picture-movement-ne +@findex picture-movement-sw +@findex picture-movement-se +@kindex C-c < @r{(Picture mode)} +@kindex C-c > @r{(Picture mode)} +@kindex C-c ^ @r{(Picture mode)} +@kindex C-c . @r{(Picture mode)} +@kindex C-c ` @r{(Picture mode)} +@kindex C-c ' @r{(Picture mode)} +@kindex C-c / @r{(Picture mode)} +@kindex C-c \ @r{(Picture mode)} + Since ``self-inserting'' characters in Picture mode overwrite and move +point, there is no essential restriction on how point should be moved. +Normally point moves right, but you can specify any of the eight +orthogonal or diagonal directions for motion after a ``self-inserting'' +character. This is useful for drawing lines in the buffer. + +@table @kbd +@item C-c < +@itemx C-c @key{LEFT} +Move left after insertion (@code{picture-movement-left}). +@item C-c > +@itemx C-c @key{RIGHT} +Move right after insertion (@code{picture-movement-right}). +@item C-c ^ +@itemx C-c @key{UP} +Move up after insertion (@code{picture-movement-up}). +@item C-c . +@itemx C-c @key{DOWN} +Move down after insertion (@code{picture-movement-down}). +@item C-c ` +@itemx C-c @key{HOME} +Move up and left (``northwest'') after insertion (@code{picture-movement-nw}). +@item C-c ' +@itemx C-c @key{PAGEUP} +Move up and right (``northeast'') after insertion +(@code{picture-movement-ne}). +@item C-c / +@itemx C-c @key{END} +Move down and left (``southwest'') after insertion +@*(@code{picture-movement-sw}). +@item C-c \ +@itemx C-c @key{PAGEDOWN} +Move down and right (``southeast'') after insertion +@*(@code{picture-movement-se}). +@end table + +@kindex C-c C-f @r{(Picture mode)} +@kindex C-c C-b @r{(Picture mode)} +@findex picture-motion +@findex picture-motion-reverse + Two motion commands move based on the current Picture insertion +direction. The command @kbd{C-c C-f} (@code{picture-motion}) moves in the +same direction as motion after ``insertion'' currently does, while @kbd{C-c +C-b} (@code{picture-motion-reverse}) moves in the opposite direction. + +@node Tabs in Picture +@section Picture Mode Tabs + +@kindex M-TAB @r{(Picture mode)} +@findex picture-tab-search +@vindex picture-tab-chars + Two kinds of tab-like action are provided in Picture mode. Use +@kbd{M-@key{TAB}} (@code{picture-tab-search}) for context-based tabbing. +With no argument, it moves to a point underneath the next +``interesting'' character that follows whitespace in the previous +nonblank line. ``Next'' here means ``appearing at a horizontal position +greater than the one point starts out at.'' With an argument, as in +@kbd{C-u M-@key{TAB}}, this command moves to the next such interesting +character in the current line. @kbd{M-@key{TAB}} does not change the +text; it only moves point. ``Interesting'' characters are defined by +the variable @code{picture-tab-chars}, which should define a set of +characters. The syntax for this variable is like the syntax used inside +of @samp{[@dots{}]} in a regular expression---but without the @samp{[} +and the @samp{]}. Its default value is @code{"!-~"}. + +@findex picture-tab + @key{TAB} itself runs @code{picture-tab}, which operates based on the +current tab stop settings; it is the Picture mode equivalent of +@code{tab-to-tab-stop}. Normally it just moves point, but with a numeric +argument it clears the text that it moves over. + +@kindex C-c TAB @r{(Picture mode)} +@findex picture-set-tab-stops + The context-based and tab-stop-based forms of tabbing are brought +together by the command @kbd{C-c @key{TAB}} (@code{picture-set-tab-stops}). +This command sets the tab stops to the positions which @kbd{M-@key{TAB}} +would consider significant in the current line. The use of this command, +together with @key{TAB}, can get the effect of context-based tabbing. But +@kbd{M-@key{TAB}} is more convenient in the cases where it is sufficient. + + It may be convenient to prevent use of actual tab characters in +pictures. For example, this prevents @kbd{C-x @key{TAB}} from messing +up the picture. You can do this by setting the variable +@code{indent-tabs-mode} to @code{nil}. + +@node Rectangles in Picture +@section Picture Mode Rectangle Commands +@cindex rectangles and Picture mode +@cindex Picture mode and rectangles + + Picture mode defines commands for working on rectangular pieces of +the text in ways that fit with the quarter-plane model. The standard +rectangle commands may also be useful. +@iftex +@xref{Rectangles,,, emacs, the Emacs Manual}. +@end iftex +@ifnottex +@xref{Rectangles}. +@end ifnottex + +@table @kbd +@item C-c C-k +Clear out the region-rectangle with spaces +(@code{picture-clear-rectangle}). With argument, delete the text. +@item C-c C-w @var{r} +Similar, but save rectangle contents in register @var{r} first +(@code{picture-clear-rectangle-to-register}). +@item C-c C-y +Copy last killed rectangle into the buffer by overwriting, with upper +left corner at point (@code{picture-yank-rectangle}). With argument, +insert instead. +@item C-c C-x @var{r} +Similar, but use the rectangle in register @var{r} +(@code{picture-yank-rectangle-from-register}). +@end table + +@kindex C-c C-k @r{(Picture mode)} +@kindex C-c C-w @r{(Picture mode)} +@findex picture-clear-rectangle +@findex picture-clear-rectangle-to-register + The picture rectangle commands @kbd{C-c C-k} +(@code{picture-clear-rectangle}) and @kbd{C-c C-w} +(@code{picture-clear-rectangle-to-register}) differ from the standard +rectangle commands in that they normally clear the rectangle instead of +deleting it; this is analogous with the way @kbd{C-d} is changed in Picture +mode. + + However, deletion of rectangles can be useful in Picture mode, so +these commands delete the rectangle if given a numeric argument. +@kbd{C-c C-k} either with or without a numeric argument saves the +rectangle for @kbd{C-c C-y}. + +@kindex C-c C-y @r{(Picture mode)} +@kindex C-c C-x @r{(Picture mode)} +@findex picture-yank-rectangle +@findex picture-yank-rectangle-from-register + The Picture mode commands for yanking rectangles differ from the +standard ones in that they overwrite instead of inserting. This is +the same way that Picture mode insertion of other text differs from +other modes. @kbd{C-c C-y} (@code{picture-yank-rectangle}) inserts +(by overwriting) the rectangle that was most recently killed, while +@kbd{C-c C-x} (@code{picture-yank-rectangle-from-register}) does +likewise for the rectangle found in a specified register. + +@ignore + arch-tag: 10e423ad-d896-42f2-a7e8-7018adeaf8c2 +@end ignore diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi new file mode 100644 index 00000000000..2472d7daabe --- /dev/null +++ b/doc/emacs/programs.texi @@ -0,0 +1,1773 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1999, 2000, +@c 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Programs, Building, Text, Top +@chapter Editing Programs +@cindex Lisp editing +@cindex C editing +@cindex program editing + + Emacs provides many features to facilitate editing programs. Some +of these features can + +@itemize @bullet +@item +Find or move over top-level definitions (@pxref{Defuns}). +@item +Apply the usual indentation conventions of the language +(@pxref{Program Indent}). +@item +Balance parentheses (@pxref{Parentheses}). +@item +Insert, kill or align comments (@pxref{Comments}). +@item +Highlight program syntax (@pxref{Font Lock}). +@end itemize + + This chapter describes these features and many more. + +@menu +* Program Modes:: Major modes for editing programs. +* Defuns:: Commands to operate on major top-level parts + of a program. +* Program Indent:: Adjusting indentation to show the nesting. +* Parentheses:: Commands that operate on parentheses. +* Comments:: Inserting, killing, and aligning comments. +* Documentation:: Getting documentation of functions you plan to call. +* Hideshow:: Displaying blocks selectively. +* Symbol Completion:: Completion on symbol names of your program or language. +* Glasses:: Making identifiersLikeThis more readable. +* Misc for Programs:: Other Emacs features useful for editing programs. +* C Modes:: Special commands of C, C++, Objective-C, + Java, and Pike modes. +* Asm Mode:: Asm mode and its special features. +@ifnottex +* Fortran:: Fortran mode and its special features. +@end ifnottex +@end menu + +@node Program Modes +@section Major Modes for Programming Languages +@cindex modes for programming languages + + Emacs has specialized major modes for various programming languages. +@xref{Major Modes}. A programming language major mode typically +specifies the syntax of expressions, the customary rules for +indentation, how to do syntax highlighting for the language, and how +to find the beginning of a function definition. It often customizes +or provides facilities for compiling and debugging programs as well. + + Ideally, Emacs should provide a major mode for each programming +language that you might want to edit; if it doesn't have a mode for +your favorite language, you can contribute one. But often the mode +for one language can serve for other syntactically similar languages. +The major mode for language @var{l} is called @code{@var{l}-mode}, +and you can select it by typing @kbd{M-x @var{l}-mode @key{RET}}. +@xref{Choosing Modes}. + +@cindex Perl mode +@cindex Icon mode +@cindex Makefile mode +@cindex Tcl mode +@cindex CPerl mode +@cindex DSSSL mode +@cindex Octave mode +@cindex Metafont mode +@cindex Modula2 mode +@cindex Prolog mode +@cindex Python mode +@cindex Simula mode +@cindex VHDL mode +@cindex M4 mode +@cindex Shell-script mode +@cindex Delphi mode +@cindex PostScript mode +@cindex Conf mode +@cindex DNS mode + The existing programming language major modes include Lisp, Scheme (a +variant of Lisp) and the Scheme-based DSSSL expression language, Ada, +ASM, AWK, C, C++, Delphi (Object Pascal), Fortran (free format and fixed +format), Icon, IDL (CORBA), IDLWAVE, Java, Metafont (@TeX{}'s +companion for font creation), Modula2, Objective-C, Octave, Pascal, +Perl, Pike, PostScript, Prolog, Python, Simula, Tcl, and VHDL. An +alternative mode for Perl is called CPerl mode. Modes are available for +the scripting languages of the common GNU and Unix shells, VMS DCL, and +MS-DOS/MS-Windows @samp{BAT} files. There are also major modes for +editing makefiles, DNS master files, and various sorts of configuration +files. + +@kindex DEL @r{(programming modes)} +@findex c-electric-backspace + In most programming languages, indentation should vary from line to +line to illustrate the structure of the program. So the major modes +for programming languages arrange for @key{TAB} to update the +indentation of the current line. They also rebind @key{DEL} to treat +a tab as if it were the equivalent number of spaces; this lets you +delete one column of indentation without worrying whether the +whitespace consists of spaces or tabs. Use @kbd{C-b C-d} to delete a +tab character before point, in these modes. + + Separate manuals are available for the modes for Ada (@pxref{Top, , Ada +Mode, ada-mode, Ada Mode}), C/C++/Objective C/Java/Corba IDL/Pike/AWK +(@pxref{Top, , CC Mode, ccmode, CC Mode}) and the IDLWAVE modes +(@pxref{Top, , IDLWAVE, idlwave, IDLWAVE User Manual}). For Fortran +mode, see +@iftex +@ref{Fortran,,, emacs-xtra, Specialized Emacs Features}. +@end iftex +@ifnottex +@ref{Fortran}. +@end ifnottex + + +@cindex mode hook +@vindex c-mode-hook +@vindex lisp-mode-hook +@vindex emacs-lisp-mode-hook +@vindex lisp-interaction-mode-hook +@vindex scheme-mode-hook + Turning on a major mode runs a normal hook called the @dfn{mode +hook}, which is the value of a Lisp variable. Each major mode has a +mode hook, and the hook's name is always made from the mode command's +name by adding @samp{-hook}. For example, turning on C mode runs the +hook @code{c-mode-hook}, while turning on Lisp mode runs the hook +@code{lisp-mode-hook}. The purpose of the mode hook is to give you a +place to set up customizations for that major mode. @xref{Hooks}. + +@node Defuns +@section Top-Level Definitions, or Defuns + + In Emacs, a major definition at the top level in the buffer, +something like a function, is called a @dfn{defun}. The name comes +from Lisp, but in Emacs we use it for all languages. + +@menu +* Left Margin Paren:: An open-paren or similar opening delimiter + starts a defun if it is at the left margin. +* Moving by Defuns:: Commands to move over or mark a major definition. +* Imenu:: Making buffer indexes as menus. +* Which Function:: Which Function mode shows which function you are in. +@end menu + +@node Left Margin Paren +@subsection Left Margin Convention + +@cindex open-parenthesis in leftmost column +@cindex ( in leftmost column + Emacs assumes by default that any opening delimiter found at the +left margin is the start of a top-level definition, or defun. +Therefore, @strong{don't put an opening delimiter at the left margin +unless it should have that significance}. For instance, never put an +open-parenthesis at the left margin in a Lisp file unless it is the +start of a top-level list. + + If you don't follow this convention, not only will you have trouble +when you explicitly use the commands for motion by defuns; other +features that use them will also give you trouble. This includes +the indentation commands (@pxref{Program Indent}) and Font Lock +mode (@pxref{Font Lock}). + + The most likely problem case is when you want an opening delimiter +at the start of a line inside a string. To avoid trouble, put an +escape character (@samp{\}, in C and Emacs Lisp, @samp{/} in some +other Lisp dialects) before the opening delimiter. This will not +affect the contents of the string, but will prevent that opening +delimiter from starting a defun. Here's an example: + +@example + (insert "Foo: +\(bar) +") +@end example + + To help you catch violations of this convention, Font Lock mode +highlights confusing opening delimiters (those that ought to be +quoted) in bold red. + +If you need to override this convention, you can so by setting this +user option: + +@defvar open-paren-in-column-0-is-defun-start +If this user option is set to @code{t} (the default), opening +parentheses or braces at column zero always start defuns. When it's +@code{nil}, defuns are found by searching for parens or braces at the +outermost level. +@end defvar + + Usually, you shouldn't need to set +@code{open-paren-in-column-0-is-defun-start} to @code{nil}. However, +if your buffer contains parentheses or braces in column zero which +don't start defuns and this confuses Emacs, it sometimes helps to set +the option to @code{nil}. Be aware, though, that this will make +scrolling and display in large buffers quite sluggish, and that +parentheses and braces must be correctly matched throughout the buffer +for it to work properly. + + In the earliest days, the original Emacs found defuns by moving +upward a level of parentheses or braces until there were no more +levels to go up. This always required scanning all the way back to +the beginning of the buffer, even for a small function. To speed up +the operation, we changed Emacs to assume that any opening delimiter +at the left margin is the start of a defun. This heuristic is nearly +always right, and avoids the need to scan back to the beginning of the +buffer. However, now that modern computers are so powerful, this +scanning is rarely slow enough to annoy, so we've provided a way to +disable the heuristic. + +@node Moving by Defuns +@subsection Moving by Defuns +@cindex defuns + + These commands move point or set up the region based on top-level +major definitions, also called @dfn{defuns}. + +@table @kbd +@item C-M-a +Move to beginning of current or preceding defun +(@code{beginning-of-defun}). +@item C-M-e +Move to end of current or following defun (@code{end-of-defun}). +@item C-M-h +Put region around whole current or following defun (@code{mark-defun}). +@end table + +@cindex move to beginning or end of function +@cindex function, move to beginning or end +@kindex C-M-a +@kindex C-M-e +@kindex C-M-h +@findex beginning-of-defun +@findex end-of-defun +@findex mark-defun + The commands to move to the beginning and end of the current defun +are @kbd{C-M-a} (@code{beginning-of-defun}) and @kbd{C-M-e} +(@code{end-of-defun}). If you repeat one of these commands, or use a +positive numeric argument, each repetition moves to the next defun in +the direction of motion. + + @kbd{C-M-a} with a negative argument @minus{}@var{n} moves forward +@var{n} times to the next beginning of a defun. This is not exactly +the same place that @kbd{C-M-e} with argument @var{n} would move to; +the end of this defun is not usually exactly the same place as the +beginning of the following defun. (Whitespace, comments, and perhaps +declarations can separate them.) Likewise, @kbd{C-M-e} with a +negative argument moves back to an end of a defun, which is not quite +the same as @kbd{C-M-a} with a positive argument. + +@kindex C-M-h @r{(C mode)} +@findex c-mark-function + To operate on the current defun, use @kbd{C-M-h} (@code{mark-defun}) +which puts point at the beginning and mark at the end of the current +defun. This is the easiest way to get ready to kill the defun in +order to move it to a different place in the file. If you use the +command while point is between defuns, it uses the following defun. +Successive uses of @kbd{C-M-h}, or using it in Transient Mark mode +when the mark is active, extends the end of the region to include one +more defun each time. + + In C mode, @kbd{C-M-h} runs the function @code{c-mark-function}, +which is almost the same as @code{mark-defun}; the difference is that +it backs up over the argument declarations, function name and returned +data type so that the entire C function is inside the region. This is +an example of how major modes adjust the standard key bindings so that +they do their standard jobs in a way better fitting a particular +language. Other major modes may replace any or all of these key +bindings for that purpose. + +@node Imenu +@subsection Imenu +@cindex index of buffer definitions +@cindex buffer definitions index +@cindex tags + + The Imenu facility offers a way to find the major definitions in +a file by name. It is also useful in text formatter major modes, +where it treats each chapter, section, etc., as a definition. +(@xref{Tags}, for a more powerful feature that handles multiple files +together.) + +@findex imenu + If you type @kbd{M-x imenu}, it reads the name of a definition using +the minibuffer, then moves point to that definition. You can use +completion to specify the name; the command always displays the whole +list of valid names. + +@findex imenu-add-menubar-index + Alternatively, you can bind the command @code{imenu} to a mouse +click. Then it displays mouse menus for you to select a definition +name. You can also add the buffer's index to the menu bar by calling +@code{imenu-add-menubar-index}. If you want to have this menu bar +item available for all buffers in a certain major mode, you can do +this by adding @code{imenu-add-menubar-index} to its mode hook. But +if you have done that, you will have to wait a little while each time +you visit a file in that mode, while Emacs finds all the definitions +in that buffer. + +@vindex imenu-auto-rescan + When you change the contents of a buffer, if you add or delete +definitions, you can update the buffer's index based on the +new contents by invoking the @samp{*Rescan*} item in the menu. +Rescanning happens automatically if you set @code{imenu-auto-rescan} to +a non-@code{nil} value. There is no need to rescan because of small +changes in the text. + +@vindex imenu-sort-function + You can customize the way the menus are sorted by setting the +variable @code{imenu-sort-function}. By default, names are ordered as +they occur in the buffer; if you want alphabetic sorting, use the +symbol @code{imenu--sort-by-name} as the value. You can also +define your own comparison function by writing Lisp code. + + Imenu provides the information to guide Which Function mode +@ifnottex +(@pxref{Which Function}). +@end ifnottex +@iftex +(see below). +@end iftex +The Speedbar can also use it (@pxref{Speedbar}). + +@node Which Function +@subsection Which Function Mode +@cindex current function name in mode line + + Which Function mode is a minor mode that displays the current +function name in the mode line, updating it as you move around in a +buffer. + +@findex which-function-mode +@vindex which-func-modes + To either enable or disable Which Function mode, use the command +@kbd{M-x which-function-mode}. This command is global; it applies to +all buffers, both existing ones and those yet to be created. However, +it takes effect only in certain major modes, those listed in the value +of @code{which-func-modes}. If the value is @code{t}, then Which +Function mode applies to all major modes that know how to support +it---in other words, all the major modes that support Imenu. + +@node Program Indent +@section Indentation for Programs +@cindex indentation for programs + + The best way to keep a program properly indented is to use Emacs to +reindent it as you change it. Emacs has commands to indent properly +either a single line, a specified number of lines, or all of the lines +inside a single parenthetical grouping. + +@menu +* Basic Indent:: Indenting a single line. +* Multi-line Indent:: Commands to reindent many lines at once. +* Lisp Indent:: Specifying how each Lisp function should be indented. +* C Indent:: Extra features for indenting C and related modes. +* Custom C Indent:: Controlling indentation style for C and related modes. +@end menu + +@cindex pretty-printer + Emacs also provides a Lisp pretty-printer in the library @code{pp}. +This program reformats a Lisp object with indentation chosen to look nice. + +@node Basic Indent +@subsection Basic Program Indentation Commands + + The basic indentation commands indent a single line according to the +usual conventions of the language you are editing. + +@need 1000 +@table @kbd +@item @key{TAB} +Adjust indentation of current line. +@item C-j +Insert a newline, then adjust indentation of following line +(@code{newline-and-indent}). +@end table + +@kindex TAB @r{(programming modes)} +@findex c-indent-command +@findex indent-line-function +@findex indent-for-tab-command + The basic indentation command is @key{TAB}, which gives the current line +the correct indentation as determined from the previous lines. The +function that @key{TAB} runs depends on the major mode; it is +@code{lisp-indent-line} +in Lisp mode, @code{c-indent-command} in C mode, etc. These functions +understand the syntax and conventions of different languages, but they all do +conceptually the same job: @key{TAB} in any programming-language major mode +inserts or deletes whitespace at the beginning of the current line, +independent of where point is in the line. If point was inside the +whitespace at the beginning of the line, @key{TAB} puts it at the end of +that whitespace; otherwise, @key{TAB} keeps point fixed with respect to +the characters around it. + + Use @kbd{C-q @key{TAB}} to insert a tab character at point. + +@kindex C-j +@findex newline-and-indent + When entering lines of new code, use @kbd{C-j} +(@code{newline-and-indent}), which inserts a newline and then adjusts +indentation after it. (It also deletes any trailing whitespace which +remains before the new newline.) Thus, @kbd{C-j} at the end of a line +creates a blank line with appropriate indentation. In programming +language modes, it is equivalent to @key{RET} @key{TAB}. + + @key{TAB} indents a line that starts within a parenthetical grouping +under the preceding line within the grouping, or the text after the +parenthesis. Therefore, if you manually give one of these lines a +nonstandard indentation, the lines below will tend to follow it. This +behavior is convenient in cases where you have overridden the standard +result of @key{TAB} because you find it unaesthetic for a particular +line. + + In some modes, an open-parenthesis, open-brace or other opening +delimiter at the left margin is assumed by Emacs (including the +indentation routines) to be the start of a function. This speeds up +indentation commands. If you will be editing text which contains +opening delimiters in column zero that aren't the beginning of a +functions, even inside strings or comments, you must set +@code{open-paren-in-column-0-is-defun-start}. @xref{Left Margin +Paren}, for more information on this. + + Normally, lines are indented with tabs and spaces. If you want Emacs +to use spaces only, set @code{indent-tabs-mode} (@pxref{Just Spaces}). + +@node Multi-line Indent +@subsection Indenting Several Lines + + When you wish to reindent several lines of code which have been +altered or moved to a different level in the parenthesis structure, +you have several commands available. + +@table @kbd +@item C-M-q +Reindent all the lines within one parenthetical grouping (@code{indent-pp-sexp}). +@item C-M-\ +Reindent all lines in the region (@code{indent-region}). +@item C-u @key{TAB} +Shift an entire parenthetical grouping rigidly sideways so that its +first line is properly indented. +@item M-x indent-code-rigidly +Shift all the lines in the region rigidly sideways, but do not alter +lines that start inside comments and strings. +@end table + +@kindex C-M-q +@findex indent-pp-sexp + You can reindent the contents of a single parenthetical grouping by +positioning point before the beginning of it and typing @kbd{C-M-q} +(@code{indent-pp-sexp} in Lisp mode, @code{c-indent-exp} in C mode; also +bound to other suitable commands in other modes). The indentation of +the line where the grouping starts is not changed; therefore this +changes only the relative indentation within the grouping, not its +overall indentation. To correct that as well, type @key{TAB} first. + + Another way to specify the range to be reindented is with the +region. The command @kbd{C-M-\} (@code{indent-region}) applies +@key{TAB} to every line whose first character is between point and +mark. + +@kindex C-u TAB + If you like the relative indentation within a grouping, but not the +indentation of its first line, you can type @kbd{C-u @key{TAB}} to +reindent the whole grouping as a rigid unit. (This works in Lisp +modes and C and related modes.) @key{TAB} with a numeric argument +reindents the current line as usual, then reindents by the same amount +all the lines in the parenthetical grouping starting on the current +line. It is clever, though, and does not alter lines that start +inside strings. Neither does it alter C preprocessor lines when in C +mode, but it does reindent any continuation lines that may be attached +to them. + +@findex indent-code-rigidly + You can also perform this operation on the region, using the command +@kbd{M-x indent-code-rigidly}. It rigidly shifts all the lines in the +region sideways, like @code{indent-rigidly} does (@pxref{Indentation +Commands}). It doesn't alter the indentation of lines that start +inside a string, unless the region also starts inside that string. +The prefix arg specifies the number of columns to indent. + +@node Lisp Indent +@subsection Customizing Lisp Indentation +@cindex customizing Lisp indentation + + The indentation pattern for a Lisp expression can depend on the function +called by the expression. For each Lisp function, you can choose among +several predefined patterns of indentation, or define an arbitrary one with +a Lisp program. + + The standard pattern of indentation is as follows: the second line of the +expression is indented under the first argument, if that is on the same +line as the beginning of the expression; otherwise, the second line is +indented underneath the function name. Each following line is indented +under the previous line whose nesting depth is the same. + +@vindex lisp-indent-offset + If the variable @code{lisp-indent-offset} is non-@code{nil}, it overrides +the usual indentation pattern for the second line of an expression, so that +such lines are always indented @code{lisp-indent-offset} more columns than +the containing list. + +@vindex lisp-body-indent + Certain functions override the standard pattern. Functions whose +names start with @code{def} treat the second lines as the start of +a @dfn{body}, by indenting the second line @code{lisp-body-indent} +additional columns beyond the open-parenthesis that starts the +expression. + +@cindex @code{lisp-indent-function} property + You can override the standard pattern in various ways for individual +functions, according to the @code{lisp-indent-function} property of +the function name. Normally you would use this for macro definitions +and specify it using the @code{declare} construct (@pxref{Defining +Macros,,, elisp, the Emacs Lisp Reference Manual}). + +@node C Indent +@subsection Commands for C Indentation + + Here are special features for indentation in C mode and related modes: + +@table @code +@item C-c C-q +@kindex C-c C-q @r{(C mode)} +@findex c-indent-defun +Reindent the current top-level function definition or aggregate type +declaration (@code{c-indent-defun}). + +@item C-M-q +@kindex C-M-q @r{(C mode)} +@findex c-indent-exp +Reindent each line in the balanced expression that follows point +(@code{c-indent-exp}). A prefix argument inhibits warning messages +about invalid syntax. + +@item @key{TAB} +@findex c-indent-command +Reindent the current line, and/or in some cases insert a tab character +(@code{c-indent-command}). + +@vindex c-tab-always-indent +If @code{c-tab-always-indent} is @code{t}, this command always reindents +the current line and does nothing else. This is the default. + +If that variable is @code{nil}, this command reindents the current line +only if point is at the left margin or in the line's indentation; +otherwise, it inserts a tab (or the equivalent number of spaces, +if @code{indent-tabs-mode} is @code{nil}). + +Any other value (not @code{nil} or @code{t}) means always reindent the +line, and also insert a tab if within a comment or a string. +@end table + + To reindent the whole current buffer, type @kbd{C-x h C-M-\}. This +first selects the whole buffer as the region, then reindents that +region. + + To reindent the current block, use @kbd{C-M-u C-M-q}. This moves +to the front of the block and then reindents it all. + +@node Custom C Indent +@subsection Customizing C Indentation +@cindex style (for indentation) + + C mode and related modes use a flexible mechanism for customizing +indentation. C mode indents a source line in two steps: first it +classifies the line syntactically according to its contents and +context; second, it determines the indentation offset associated by +your selected @dfn{style} with the syntactic construct and adds this +onto the indentation of the @dfn{anchor statement}. + +@table @kbd +@item C-c . @key{RET} @var{style} @key{RET} +Select a predefined style @var{style} (@code{c-set-style}). +@end table + + A @dfn{style} is a named collection of customizations that can be +used in C mode and the related modes. @ref{Styles,,, ccmode, The CC +Mode Manual}, for a complete description. Emacs comes with several +predefined styles, including @code{gnu}, @code{k&r}, @code{bsd}, +@code{stroustrup}, @code{linux}, @code{python}, @code{java}, +@code{whitesmith}, @code{ellemtel}, and @code{awk}. Some of these +styles are primarily intended for one language, but any of them can be +used with any of the languages supported by these modes. To find out +what a style looks like, select it and reindent some code, e.g., by +typing @key{C-M-q} at the start of a function definition. + +@kindex C-c . @r{(C mode)} +@findex c-set-style + To choose a style for the current buffer, use the command @w{@kbd{C-c +.}}. Specify a style name as an argument (case is not significant). +This command affects the current buffer only, and it affects only +future invocations of the indentation commands; it does not reindent +the code already in the buffer. To reindent the whole buffer in the +new style, you can type @kbd{C-x h C-M-\}. + +@vindex c-default-style + You can also set the variable @code{c-default-style} to specify the +default style for various major modes. Its value should be either the +style's name (a string) or an alist, in which each element specifies +one major mode and which indentation style to use for it. For +example, + +@example +(setq c-default-style + '((java-mode . "java") (awk-mode . "awk") (other . "gnu"))) +@end example + +@noindent +specifies explicit choices for Java and AWK modes, and the default +@samp{gnu} style for the other C-like modes. (These settings are +actually the defaults.) This variable takes effect when you select +one of the C-like major modes; thus, if you specify a new default +style for Java mode, you can make it take effect in an existing Java +mode buffer by typing @kbd{M-x java-mode} there. + + The @code{gnu} style specifies the formatting recommended by the GNU +Project for C; it is the default, so as to encourage use of our +recommended style. + + @xref{Indentation Engine Basics,,, ccmode, the CC Mode Manual}, and +@ref{Customizing Indentation,,, ccmode, the CC Mode Manual}, for more +information on customizing indentation for C and related modes, +including how to override parts of an existing style and how to define +your own styles. + +@node Parentheses +@section Commands for Editing with Parentheses + +@findex check-parens +@cindex unbalanced parentheses and quotes + This section describes the commands and features that take advantage +of the parenthesis structure in a program, or help you keep it +balanced. + + When talking about these facilities, the term ``parenthesis'' also +includes braces, brackets, or whatever delimiters are defined to match +in pairs. The major mode controls which delimiters are significant, +through the syntax table (@pxref{Syntax}). In Lisp, only parentheses +count; in C, these commands apply to braces and brackets too. + + You can use @kbd{M-x check-parens} to find any unbalanced +parentheses and unbalanced string quotes in the buffer. + +@menu +* Expressions:: Expressions with balanced parentheses. +* Moving by Parens:: Commands for moving up, down and across + in the structure of parentheses. +* Matching:: Insertion of a close-delimiter flashes matching open. +@end menu + +@node Expressions +@subsection Expressions with Balanced Parentheses + +@cindex sexp +@cindex expression +@cindex balanced expression + These commands deal with balanced expressions, also called +@dfn{sexps}@footnote{The word ``sexp'' is used to refer to an +expression in Lisp.}. + +@table @kbd +@item C-M-f +Move forward over a balanced expression (@code{forward-sexp}). +@item C-M-b +Move backward over a balanced expression (@code{backward-sexp}). +@item C-M-k +Kill balanced expression forward (@code{kill-sexp}). +@item C-M-t +Transpose expressions (@code{transpose-sexps}). +@item C-M-@@ +@itemx C-M-@key{SPC} +Put mark after following expression (@code{mark-sexp}). +@end table + + Each programming language major mode customizes the definition of +balanced expressions to suit that language. Balanced expressions +typically include symbols, numbers, and string constants, as well as +any pair of matching delimiters and their contents. Some languages +have obscure forms of expression syntax that nobody has bothered to +implement in Emacs. + +@cindex Control-Meta + By convention, the keys for these commands are all Control-Meta +characters. They usually act on expressions just as the corresponding +Meta characters act on words. For instance, the command @kbd{C-M-b} +moves backward over a balanced expression, just as @kbd{M-b} moves +back over a word. + +@kindex C-M-f +@kindex C-M-b +@findex forward-sexp +@findex backward-sexp + To move forward over a balanced expression, use @kbd{C-M-f} +(@code{forward-sexp}). If the first significant character after point +is an opening delimiter (@samp{(} in Lisp; @samp{(}, @samp{[} or +@samp{@{} in C), @kbd{C-M-f} moves past the matching closing +delimiter. If the character begins a symbol, string, or number, +@kbd{C-M-f} moves over that. + + The command @kbd{C-M-b} (@code{backward-sexp}) moves backward over a +balanced expression. The detailed rules are like those above for +@kbd{C-M-f}, but with directions reversed. If there are prefix +characters (single-quote, backquote and comma, in Lisp) preceding the +expression, @kbd{C-M-b} moves back over them as well. The balanced +expression commands move across comments as if they were whitespace, +in most modes. + + @kbd{C-M-f} or @kbd{C-M-b} with an argument repeats that operation the +specified number of times; with a negative argument, it moves in the +opposite direction. + +@cindex killing expressions +@kindex C-M-k +@findex kill-sexp + Killing a whole balanced expression can be done with @kbd{C-M-k} +(@code{kill-sexp}). @kbd{C-M-k} kills the characters that @kbd{C-M-f} +would move over. + +@cindex transposition of expressions +@kindex C-M-t +@findex transpose-sexps + A somewhat random-sounding command which is nevertheless handy is +@kbd{C-M-t} (@code{transpose-sexps}), which drags the previous +balanced expression across the next one. An argument serves as a +repeat count, moving the previous expression over that many following +ones. A negative argument drags the previous balanced expression +backwards across those before it (thus canceling out the effect of +@kbd{C-M-t} with a positive argument). An argument of zero, rather +than doing nothing, transposes the balanced expressions ending at or +after point and the mark. + +@kindex C-M-@@ +@kindex C-M-@key{SPC} +@findex mark-sexp + To set the region around the next balanced expression in the buffer, +use @kbd{C-M-@@} (@code{mark-sexp}), which sets mark at the same place +that @kbd{C-M-f} would move to. @kbd{C-M-@@} takes arguments like +@kbd{C-M-f}. In particular, a negative argument is useful for putting +the mark at the beginning of the previous balanced expression. The +alias @kbd{C-M-@key{SPC}} is equivalent to @kbd{C-M-@@}. When you +repeat this command, or use it in Transient Mark mode when the mark is +active, it extends the end of the region by one sexp each time. + + In languages that use infix operators, such as C, it is not possible +to recognize all balanced expressions as such because there can be +multiple possibilities at a given position. For example, C mode does +not treat @samp{foo + bar} as a single expression, even though it +@emph{is} one C expression; instead, it recognizes @samp{foo} as one +expression and @samp{bar} as another, with the @samp{+} as punctuation +between them. Both @samp{foo + bar} and @samp{foo} are legitimate +choices for ``the expression following point'' when point is at the +@samp{f}, so the expression commands must perforce choose one or the +other to operate on. Note that @samp{(foo + bar)} is recognized as a +single expression in C mode, because of the parentheses. + +@node Moving by Parens +@subsection Moving in the Parenthesis Structure + +@cindex parenthetical groupings +@cindex parentheses, moving across +@cindex matching parenthesis and braces, moving to +@cindex braces, moving across +@cindex list commands + The Emacs commands for handling parenthetical groupings see nothing +except parentheses (or whatever characters must balance in the +language you are working with), and the escape characters that might +be used to quote those. They are mainly intended for editing +programs, but can be useful for editing any text that has parentheses. +They are sometimes called ``list'' commands because in Lisp these +groupings are lists. + +@table @kbd +@item C-M-n +Move forward over a parenthetical group (@code{forward-list}). +@item C-M-p +Move backward over a parenthetical group (@code{backward-list}). +@item C-M-u +Move up in parenthesis structure (@code{backward-up-list}). +@item C-M-d +Move down in parenthesis structure (@code{down-list}). +@end table + +@kindex C-M-n +@kindex C-M-p +@findex forward-list +@findex backward-list + The ``list'' commands @kbd{C-M-n} (@code{forward-list}) and +@kbd{C-M-p} (@code{backward-list}) move over one (or @var{n}) +parenthetical groupings, skipping blithely over any amount of text +that doesn't include meaningful parentheses (symbols, strings, etc.). + +@kindex C-M-u +@findex backward-up-list + @kbd{C-M-n} and @kbd{C-M-p} try to stay at the same level in the +parenthesis structure. To move @emph{up} one (or @var{n}) levels, use +@kbd{C-M-u} (@code{backward-up-list}). @kbd{C-M-u} moves backward up +past one unmatched opening delimiter. A positive argument serves as a +repeat count; a negative argument reverses the direction of motion, so +that the command moves forward and up one or more levels. + +@kindex C-M-d +@findex down-list + To move @emph{down} in the parenthesis structure, use @kbd{C-M-d} +(@code{down-list}). In Lisp mode, where @samp{(} is the only opening +delimiter, this is nearly the same as searching for a @samp{(}. An +argument specifies the number of levels to go down. + +@node Matching +@subsection Automatic Display Of Matching Parentheses +@cindex matching parentheses +@cindex parentheses, displaying matches + + The Emacs parenthesis-matching feature is designed to show +automatically how parentheses (and other matching delimiters) match in +the text. Whenever you type a self-inserting character that is a +closing delimiter, the cursor moves momentarily to the location of the +matching opening delimiter, provided that is on the screen. If it is +not on the screen, Emacs displays some of the text near it in the echo +area. Either way, you can tell which grouping you are closing off. + + If the opening delimiter and closing delimiter are mismatched---such +as in @samp{[x)}---a warning message is displayed in the echo area. + +@vindex blink-matching-paren +@vindex blink-matching-paren-distance +@vindex blink-matching-delay + Three variables control parenthesis match display: + + @code{blink-matching-paren} turns the feature on or off: @code{nil} +disables it, but the default is @code{t} to enable match display. + + @code{blink-matching-delay} says how many seconds to leave the +cursor on the matching opening delimiter, before bringing it back to +the real location of point; the default is 1, but on some systems it +is useful to specify a fraction of a second. + + @code{blink-matching-paren-distance} specifies how many characters +back to search to find the matching opening delimiter. If the match +is not found in that distance, scanning stops, and nothing is displayed. +This is to prevent the scan for the matching delimiter from wasting +lots of time when there is no match. The default is 25600. + +@cindex Show Paren mode +@cindex highlighting matching parentheses +@findex show-paren-mode + Show Paren mode provides a more powerful kind of automatic matching. +Whenever point is after a closing delimiter, that delimiter and its +matching opening delimiter are both highlighted; otherwise, if point +is before an opening delimiter, the matching closing delimiter is +highlighted. (There is no need to highlight the opening delimiter in +that case, because the cursor appears on top of that character.) Use +the command @kbd{M-x show-paren-mode} to enable or disable this mode. + + Show Paren mode uses the faces @code{show-paren-match} and +@code{show-paren-mismatch} to highlight parentheses; you can customize +them to control how highlighting looks. @xref{Face Customization}. + +@node Comments +@section Manipulating Comments +@cindex comments + + Because comments are such an important part of programming, Emacs +provides special commands for editing and inserting comments. It can +also do spell checking on comments with Flyspell Prog mode +(@pxref{Spelling}). + +@menu +* Comment Commands:: Inserting, killing, and aligning comments. +* Multi-Line Comments:: Commands for adding and editing multi-line comments. +* Options for Comments::Customizing the comment features. +@end menu + +@node Comment Commands +@subsection Comment Commands +@cindex indentation for comments +@cindex alignment for comments + + The comment commands in this table insert, kill and align comments. +They are described in this section and following sections. + +@table @asis +@item @kbd{M-;} +Insert or realign comment on current line; alternatively, comment or +uncomment the region (@code{comment-dwim}). +@item @kbd{C-u M-;} +Kill comment on current line (@code{comment-kill}). +@item @kbd{C-x ;} +Set comment column (@code{comment-set-column}). +@item @kbd{C-M-j} +@itemx @kbd{M-j} +Like @key{RET} followed by inserting and aligning a comment +(@code{comment-indent-new-line}). @xref{Multi-Line Comments}. +@item @kbd{M-x comment-region} +@itemx @kbd{C-c C-c} (in C-like modes) +Add or remove comment delimiters on all the lines in the region. +@end table + +@kindex M-; +@findex comment-dwim + The command to create or align a comment is @kbd{M-;} +(@code{comment-dwim}). The word ``dwim'' is an acronym for ``Do What +I Mean''; it indicates that this command can be used for many +different jobs relating to comments, depending on the situation where +you use it. + + If there is no comment already on the line, @kbd{M-;} inserts a new +comment, aligned at a specific column called the @dfn{comment column}. +The new comment begins with the string Emacs thinks comments should +start with (the value of @code{comment-start}; see below). Point is +after that string, so you can insert the text of the comment right +away. If the major mode has specified a string to terminate comments, +@kbd{M-;} inserts that after point, to keep the syntax valid. + + If the text of the line extends past the comment column, this +command aligns the comment start string to a suitable boundary +(usually, at least one space is inserted). + + You can also use @kbd{M-;} to align an existing comment. If a line +already contains the comment-start string, @kbd{M-;} realigns it to +the conventional alignment and moves point after it. (Exception: +comments starting in column 0 are not moved.) Even when an existing +comment is properly aligned, @kbd{M-;} is still useful for moving +directly to the start of the text inside the comment. + +@findex comment-kill +@kindex C-u M-; + @kbd{C-u M-;} kills any comment on the current line, along with the +whitespace before it. To reinsert the comment on another line, move +to the end of that line, do @kbd{C-y}, and then do @kbd{M-;} to +realign it. + + Note that @kbd{C-u M-;} is not a distinct key; it is @kbd{M-;} +(@code{comment-dwim}) with a prefix argument. That command is +programmed so that when it receives a prefix argument it calls +@code{comment-kill}. However, @code{comment-kill} is a valid command +in its own right, and you can bind it directly to a key if you wish. + + @kbd{M-;} does two other jobs when used with an active region in +Transient Mark mode (@pxref{Transient Mark}). Then it either adds or +removes comment delimiters on each line of the region. (If every line +is a comment, it removes comment delimiters from each; otherwise, it +adds comment delimiters to each.) If you are not using Transient Mark +mode, then you should use the commands @code{comment-region} and +@code{uncomment-region} to do these jobs (@pxref{Multi-Line Comments}), +or else enable Transient Mark mode momentarily (@pxref{Momentary Mark}). +A prefix argument used in these circumstances specifies how many +comment delimiters to add or how many to delete. + + Some major modes have special rules for aligning certain kinds of +comments in certain contexts. For example, in Lisp code, comments which +start with two semicolons are indented as if they were lines of code, +instead of at the comment column. Comments which start with three +semicolons are supposed to start at the left margin and are often used +for sectioning purposes. Emacs understands +these conventions by indenting a double-semicolon comment using @key{TAB}, +and by not changing the indentation of a triple-semicolon comment at all. + +@example +;; This function is just an example. +;;; Here either two or three semicolons are appropriate. +(defun foo (x) +;;; And now, the first part of the function: + ;; The following line adds one. + (1+ x)) ; This line adds one. +@end example + + For C-like modes, you can configure the exact effect of @kbd{M-;} +more flexibly than for most buffers by setting the variables +@code{c-indent-comment-alist} and +@code{c-indent-comments-syntactically-p}. For example, on a line +ending in a closing brace, @kbd{M-;} puts the comment one space after +the brace rather than at @code{comment-column}. For full details see +@ref{Comment Commands,,, ccmode, The CC Mode Manual}. + +@node Multi-Line Comments +@subsection Multiple Lines of Comments + +@kindex C-M-j +@kindex M-j +@cindex blank lines in programs +@findex comment-indent-new-line + + If you are typing a comment and wish to continue it on another line, +you can use the command @kbd{C-M-j} or @kbd{M-j} +(@code{comment-indent-new-line}). If @code{comment-multi-line} +(@pxref{Options for Comments}) is non-@code{nil}, it moves to a new +line within the comment. Otherwise it closes the comment and starts a +new comment on a new line. When Auto Fill mode is on, going past the +fill column while typing a comment causes the comment to be continued +in just this fashion. + +@kindex C-c C-c (C mode) +@findex comment-region + To turn existing lines into comment lines, use the @kbd{M-x +comment-region} command (or type @kbd{C-c C-c} in C-like modes). It +adds comment delimiters to the lines that start in the region, thus +commenting them out. With a negative argument, it does the +opposite---it deletes comment delimiters from the lines in the region. + + With a positive argument, @code{comment-region} duplicates the last +character of the comment start sequence it adds; the argument +specifies how many copies of the character to insert. Thus, in Lisp +mode, @kbd{C-u 2 M-x comment-region} adds @samp{;;} to each line. +Duplicating the comment delimiter is a way of calling attention to the +comment. It can also affect how the comment is aligned or indented. +In Lisp, for proper indentation, you should use an argument of two or +three, if between defuns; if within a defun, it must be three. + + You can configure C Mode such that when you type a @samp{/} at the +start of a line in a multi-line block comment, this closes the +comment. Enable the @code{comment-close-slash} clean-up for this. +@xref{Clean-ups,,, ccmode, The CC Mode Manual}. + +@node Options for Comments +@subsection Options Controlling Comments + +@vindex comment-column +@kindex C-x ; +@findex comment-set-column + The @dfn{comment column}, the column at which Emacs tries to place +comments, is stored in the variable @code{comment-column}. You can +set it to a number explicitly. Alternatively, the command @kbd{C-x ;} +(@code{comment-set-column}) sets the comment column to the column +point is at. @kbd{C-u C-x ;} sets the comment column to match the +last comment before point in the buffer, and then does a @kbd{M-;} to +align the current line's comment under the previous one. + + The variable @code{comment-column} is per-buffer: setting the variable +in the normal fashion affects only the current buffer, but there is a +default value which you can change with @code{setq-default}. +@xref{Locals}. Many major modes initialize this variable for the +current buffer. + +@vindex comment-start-skip + The comment commands recognize comments based on the regular +expression that is the value of the variable @code{comment-start-skip}. +Make sure this regexp does not match the null string. It may match more +than the comment starting delimiter in the strictest sense of the word; +for example, in C mode the value of the variable is +@c This stops M-q from breaking the line inside that @code. +@code{@w{"/\\*+ *\\|//+ *"}}, which matches extra stars and spaces +after the @samp{/*} itself, and accepts C++ style comments also. +(Note that @samp{\\} is needed in Lisp syntax to include a @samp{\} in +the string, which is needed to deny the first star its special meaning +in regexp syntax. @xref{Regexp Backslash}.) + +@vindex comment-start +@vindex comment-end + When a comment command makes a new comment, it inserts the value of +@code{comment-start} to begin it. The value of @code{comment-end} is +inserted after point, so that it will follow the text that you will +insert into the comment. When @code{comment-end} is non-empty, it +should start with a space. For example, in C mode, +@code{comment-start} has the value @w{@code{"/* "}} and +@code{comment-end} has the value @w{@code{" */"}}. + +@vindex comment-padding + The variable @code{comment-padding} specifies how many spaces +@code{comment-region} should insert on each line between the comment +delimiter and the line's original text. The default is 1, to insert +one space. @code{nil} means 0. Alternatively, @code{comment-padding} +can hold the actual string to insert. + +@vindex comment-multi-line + The variable @code{comment-multi-line} controls how @kbd{C-M-j} +(@code{indent-new-comment-line}) behaves when used inside a comment. +Specifically, when @code{comment-multi-line} is @code{nil}, the +command inserts a comment terminator, begins a new line, and finally +inserts a comment starter. Otherwise it does not insert the +terminator and starter, so it effectively continues the current +comment across multiple lines. In languages that allow multi-line +comments, the choice of value for this variable is a matter of taste. +The default for this variable depends on the major mode. + +@vindex comment-indent-function + The variable @code{comment-indent-function} should contain a function +that will be called to compute the alignment for a newly inserted +comment or for aligning an existing comment. It is set differently by +various major modes. The function is called with no arguments, but with +point at the beginning of the comment, or at the end of a line if a new +comment is to be inserted. It should return the column in which the +comment ought to start. For example, in Lisp mode, the indent hook +function bases its decision on how many semicolons begin an existing +comment, and on the code in the preceding lines. + +@node Documentation +@section Documentation Lookup + + Emacs provides several features you can use to look up the +documentation of functions, variables and commands that you plan to +use in your program. + +@menu +* Info Lookup:: Looking up library functions and commands + in Info files. +* Man Page:: Looking up man pages of library functions and commands. +* Lisp Doc:: Looking up Emacs Lisp functions, etc. +@end menu + +@node Info Lookup +@subsection Info Documentation Lookup + +@findex info-lookup-symbol +@findex info-lookup-file +@kindex C-h S + For many major modes, that apply to languages that have +documentation in Info, you can use @kbd{C-h S} +(@code{info-lookup-symbol}) to view the Info documentation for a +symbol used in the program. You specify the symbol with the +minibuffer; the default is the symbol appearing in the buffer at +point. For example, in C mode this looks for the symbol in the C +Library Manual. The command only works if the appropriate manual's +Info files are installed. + + The major mode determines where to look for documentation for the +symbol---which Info files to look in, and which indices to search. +You can also use @kbd{M-x info-lookup-file} to look for documentation +for a file name. + + If you use @kbd{C-h S} in a major mode that does not support it, +it asks you to specify the ``symbol help mode.'' You should enter +a command such as @code{c-mode} that would select a major +mode which @kbd{C-h S} does support. + +@node Man Page +@subsection Man Page Lookup + +@cindex manual page + On Unix, the main form of on-line documentation was the @dfn{manual +page} or @dfn{man page}. In the GNU operating system, we aim to +replace man pages with better-organized manuals that you can browse +with Info (@pxref{Misc Help}). This process is not finished, so it is +still useful to read manual pages. + +@findex manual-entry + You can read the man page for an operating system command, library +function, or system call, with the @kbd{M-x man} command. It +runs the @code{man} program to format the man page; if the system +permits, it runs @code{man} asynchronously, so that you can keep on +editing while the page is being formatted. (On MS-DOS and MS-Windows +3, you cannot edit while Emacs waits for @code{man} to finish.) The +result goes in a buffer named @samp{*Man @var{topic}*}. These buffers +use a special major mode, Man mode, that facilitates scrolling and +jumping to other manual pages. For details, type @kbd{C-h m} while in +a man page buffer. + +@cindex sections of manual pages + Each man page belongs to one of ten or more @dfn{sections}, each +named by a digit or by a digit and a letter. Sometimes there are +multiple man pages with the same name in different sections. To read +a man page from a specific section, type +@samp{@var{topic}(@var{section})} or @samp{@var{section} @var{topic}} +when @kbd{M-x manual-entry} prompts for the topic. For example, to +read the man page for the C library function @code{chmod} (as opposed +to a command of the same name), type @kbd{M-x manual-entry @key{RET} +chmod(2) @key{RET}}. (@code{chmod} is a system call, so it is in +section @samp{2}.) + +@vindex Man-switches + If you do not specify a section, the results depend on how the +@code{man} program works on your system. Some of them display only +the first man page they find. Others display all man pages that have +the specified name, so you can move between them with the @kbd{M-n} +and @kbd{M-p} keys@footnote{On some systems, the @code{man} program +accepts a @samp{-a} command-line option which tells it to display all +the man pages for the specified topic. If you want this behavior, you +can add this option to the value of the variable @code{Man-switches}.}. +The mode line shows how many manual pages are present in the Man buffer. + +@vindex Man-fontify-manpage-flag + By default, Emacs highlights the text in man pages. For a long man +page, highlighting can take substantial time. You can turn off +highlighting of man pages by setting the variable +@code{Man-fontify-manpage-flag} to @code{nil}. + +@findex Man-fontify-manpage + If you insert the text of a man page into an Emacs buffer in some +other fashion, you can use the command @kbd{M-x Man-fontify-manpage} to +perform the same conversions that @kbd{M-x manual-entry} does. + +@findex woman +@cindex manual pages, on MS-DOS/MS-Windows + An alternative way of reading manual pages is the @kbd{M-x woman} +command@footnote{The name of the command, @code{woman}, is an acronym +for ``w/o (without) man,'' since it doesn't use the @code{man} +program.}. Unlike @kbd{M-x man}, it does not run any external +programs to format and display the man pages; instead it does the job +in Emacs Lisp, so it works on systems such as MS-Windows, where the +@code{man} program (and other programs it uses) are not generally +available. + + @kbd{M-x woman} prompts for a name of a manual page, and provides +completion based on the list of manual pages that are installed on +your machine; the list of available manual pages is computed +automatically the first time you invoke @code{woman}. The word at +point in the current buffer is used to suggest the default for the +name the manual page. + + With a numeric argument, @kbd{M-x woman} recomputes the list of the +manual pages used for completion. This is useful if you add or delete +manual pages. + + If you type a name of a manual page and @kbd{M-x woman} finds that +several manual pages by the same name exist in different sections, it +pops up a window with possible candidates asking you to choose one of +them. + + For more information about setting up and using @kbd{M-x woman}, see +@ref{Top, WoMan, Browse UN*X Manual Pages WithOut Man, woman, The WoMan +Manual}. + +@node Lisp Doc +@subsection Emacs Lisp Documentation Lookup + + As you edit Lisp code to be run in Emacs, you can use the commands +@kbd{C-h f} (@code{describe-function}) and @kbd{C-h v} +(@code{describe-variable}) to view documentation of functions and +variables that you want to use. These commands use the minibuffer to +read the name of a function or variable to document, and display the +documentation in a window. Their default arguments are based on the +code in the neighborhood of point. For @kbd{C-h f}, the default is +the function called in the innermost list containing point. @kbd{C-h +v} uses the symbol name around or adjacent to point as its default. + +@cindex Eldoc mode +@findex eldoc-mode + A more automatic but less powerful method is Eldoc mode. This minor +mode constantly displays in the echo area the argument list for the +function being called at point. (In other words, it finds the +function call that point is contained in, and displays the argument +list of that function.) If point is over a documented variable, it +shows the first line of the variable's docstring. Eldoc mode applies +in Emacs Lisp and Lisp Interaction modes, and perhaps a few others +that provide special support for looking up doc strings. Use the +command @kbd{M-x eldoc-mode} to enable or disable this feature. + +@node Hideshow +@section Hideshow minor mode + +@findex hs-minor-mode + Hideshow minor mode provides selective display of portions of a +program, known as @dfn{blocks}. You can use @kbd{M-x hs-minor-mode} +to enable or disable this mode, or add @code{hs-minor-mode} to the +mode hook for certain major modes in order to enable it automatically +for those modes. + + Just what constitutes a block depends on the major mode. In C mode +or C++ mode, they are delimited by braces, while in Lisp mode and +similar modes they are delimited by parentheses. Multi-line comments +also count as blocks. + +@findex hs-hide-all +@findex hs-hide-block +@findex hs-show-all +@findex hs-show-block +@findex hs-show-region +@findex hs-hide-level +@findex hs-minor-mode +@kindex C-c @@ C-h +@kindex C-c @@ C-s +@kindex C-c @@ C-M-h +@kindex C-c @@ C-M-s +@kindex C-c @@ C-r +@kindex C-c @@ C-l +@kindex S-Mouse-2 +@table @kbd +@item C-c @@ C-h +Hide the current block (@code{hs-hide-block}). +@item C-c @@ C-s +Show the current block (@code{hs-show-block}). +@item C-c @@ C-c +Either hide or show the current block (@code{hs-toggle-hiding}). +@item S-Mouse-2 +Either hide or show the block you click on (@code{hs-mouse-toggle-hiding}). +@item C-c @@ C-M-h +Hide all top-level blocks (@code{hs-hide-all}). +@item C-c @@ C-M-s +Show everything in the buffer (@code{hs-show-all}). +@item C-c @@ C-l +Hide all blocks @var{n} levels below this block +(@code{hs-hide-level}). +@end table + +@vindex hs-hide-comments-when-hiding-all +@vindex hs-isearch-open +@vindex hs-special-modes-alist + These variables exist for customizing Hideshow mode. + +@table @code +@item hs-hide-comments-when-hiding-all +Non-@code{nil} says that @kbd{hs-hide-all} should hide comments too. + +@item hs-isearch-open +Specifies what kind of hidden blocks incremental search should make +visible. The value should be one of these four symbols: + +@table @code +@item code +Open only code blocks. +@item comment +Open only comments. +@item t +Open both code blocks and comments. +@item nil +Open neither code blocks nor comments. +@end table + +@item hs-special-modes-alist +A list of elements, each specifying how to initialize Hideshow +variables for one major mode. See the variable's documentation string +for more information. +@end table + +@node Symbol Completion +@section Completion for Symbol Names +@cindex completion (symbol names) + + In Emacs, completion is something you normally do in the minibuffer. +But one kind of completion is available in all buffers: completion for +symbol names. + +@kindex M-TAB + The character @kbd{M-@key{TAB}} runs a command to complete the +partial symbol before point against the set of meaningful symbol +names. This command inserts at point any additional characters that +it can determine from the partial name. + + If your window manager defines @kbd{M-@key{TAB}} to switch windows, +you can type @kbd{@key{ESC} @key{TAB}} or @kbd{C-M-i} instead. +However, most window managers let you customize these shortcuts, and +we recommend that you change any that get in the way of use of Emacs. + + If the partial name in the buffer has multiple possible completions +that differ in the very next character, so that it is impossible to +complete even one more character, @kbd{M-@key{TAB}} displays a list of +all possible completions in another window. + +@cindex tags-based completion +@cindex Info index completion +@findex complete-symbol + In most programming language major modes, @kbd{M-@key{TAB}} runs the +command @code{complete-symbol}, which provides two kinds of completion. +Normally it does completion based on a tags table (@pxref{Tags}); with a +numeric argument (regardless of the value), it does completion based on +the names listed in the Info file indexes for your language. Thus, to +complete the name of a symbol defined in your own program, use +@kbd{M-@key{TAB}} with no argument; to complete the name of a standard +library function, use @kbd{C-u M-@key{TAB}}. Of course, Info-based +completion works only if there is an Info file for the standard library +functions of your language, and only if it is installed at your site. + +@cindex Lisp symbol completion +@cindex completion (Lisp symbols) +@findex lisp-complete-symbol + In Emacs-Lisp mode, the name space for completion normally consists of +nontrivial symbols present in Emacs---those that have function +definitions, values or properties. However, if there is an +open-parenthesis immediately before the beginning of the partial symbol, +only symbols with function definitions are considered as completions. +The command which implements this is @code{lisp-complete-symbol}. + + In Text mode and related modes, @kbd{M-@key{TAB}} completes words +based on the spell-checker's dictionary. @xref{Spelling}. + +@node Glasses +@section Glasses minor mode +@cindex Glasses mode +@cindex identifiers, making long ones readable +@cindex StudlyCaps, making them readable +@findex glasses-mode + + Glasses minor mode makes @samp{unreadableIdentifiersLikeThis} +readable by altering the way they display. It knows two different +ways to do this: by displaying underscores between a lower-case letter +and the following capital letter, and by emboldening the capital +letters. It does not alter the buffer text, only the way they +display, so you can use it even on read-only buffers. You can use the +command @kbd{M-x glasses-mode} to enable or disable the mode in the +current buffer; you can also add @code{glasses-mode} to the mode hook +of the programming language major modes in which you normally want +to use Glasses mode. + +@node Misc for Programs +@section Other Features Useful for Editing Programs + + A number of Emacs commands that aren't designed specifically for +editing programs are useful for that nonetheless. + + The Emacs commands that operate on words, sentences and paragraphs +are useful for editing code. Most symbols names contain words +(@pxref{Words}); sentences can be found in strings and comments +(@pxref{Sentences}). Paragraphs in the strict sense can be found in +program code (in long comments), but the paragraph commands are useful +in other places too, because programming language major modes define +paragraphs to begin and end at blank lines (@pxref{Paragraphs}). +Judicious use of blank lines to make the program clearer will also +provide useful chunks of text for the paragraph commands to work on. +Auto Fill mode, if enabled in a programming language major mode, +indents the new lines which it creates. + + The selective display feature is useful for looking at the overall +structure of a function (@pxref{Selective Display}). This feature +hides the lines that are indented more than a specified amount. +Programming modes often support Outline minor mode (@pxref{Outline +Mode}). The Foldout package provides folding-editor features +(@pxref{Foldout}). + + The ``automatic typing'' features may be useful for writing programs. +@xref{Top,,Autotyping, autotype, Autotyping}. + +@node C Modes +@section C and Related Modes +@cindex C mode +@cindex Java mode +@cindex Pike mode +@cindex IDL mode +@cindex CORBA IDL mode +@cindex Objective C mode +@cindex C++ mode +@cindex AWK mode +@cindex mode, Java +@cindex mode, C +@cindex mode, C++ +@cindex mode, Objective C +@cindex mode, CORBA IDL +@cindex mode, Pike +@cindex mode, AWK + + This section gives a brief description of the special features +available in C, C++, Objective-C, Java, CORBA IDL, Pike and AWK modes. +(These are called ``C mode and related modes.'') @xref{Top, , CC Mode, +ccmode, CC Mode}, for a more extensive description of these modes +and their special features. + +@menu +* Motion in C:: Commands to move by C statements, etc. +* Electric C:: Colon and other chars can automatically reindent. +* Hungry Delete:: A more powerful DEL command. +* Other C Commands:: Filling comments, viewing expansion of macros, + and other neat features. +@end menu + +@node Motion in C +@subsection C Mode Motion Commands + + This section describes commands for moving point, in C mode and +related modes. + +@table @code +@item M-x c-beginning-of-defun +@itemx M-x c-end-of-defun +@findex c-beginning-of-defun +@findex c-end-of-defun +Move point to the beginning or end of the current function or +top-level definition. These are found by searching for the least +enclosing braces. (By contrast, @code{beginning-of-defun} and +@code{end-of-defun} search for braces in column zero.) If you are +editing code where the opening brace of a function isn't placed in +column zero, you may wish to bind @code{C-M-a} and @code{C-M-e} to +these commands. @xref{Moving by Defuns}. + +@item C-c C-u +@kindex C-c C-u @r{(C mode)} +@findex c-up-conditional +Move point back to the containing preprocessor conditional, leaving the +mark behind. A prefix argument acts as a repeat count. With a negative +argument, move point forward to the end of the containing +preprocessor conditional. + +@samp{#elif} is equivalent to @samp{#else} followed by @samp{#if}, so +the function will stop at a @samp{#elif} when going backward, but not +when going forward. + +@item C-c C-p +@kindex C-c C-p @r{(C mode)} +@findex c-backward-conditional +Move point back over a preprocessor conditional, leaving the mark +behind. A prefix argument acts as a repeat count. With a negative +argument, move forward. + +@item C-c C-n +@kindex C-c C-n @r{(C mode)} +@findex c-forward-conditional +Move point forward across a preprocessor conditional, leaving the mark +behind. A prefix argument acts as a repeat count. With a negative +argument, move backward. + +@item M-a +@kindex M-a (C mode) +@findex c-beginning-of-statement +Move point to the beginning of the innermost C statement +(@code{c-beginning-of-statement}). If point is already at the beginning +of a statement, move to the beginning of the preceding statement. With +prefix argument @var{n}, move back @var{n} @minus{} 1 statements. + +In comments or in strings which span more than one line, this command +moves by sentences instead of statements. + +@item M-e +@kindex M-e (C mode) +@findex c-end-of-statement +Move point to the end of the innermost C statement or sentence; like +@kbd{M-a} except that it moves in the other direction +(@code{c-end-of-statement}). +@end table + +@node Electric C +@subsection Electric C Characters + + In C mode and related modes, certain printing characters are +@dfn{electric}---in addition to inserting themselves, they also +reindent the current line, and optionally also insert newlines. The +``electric'' characters are @kbd{@{}, @kbd{@}}, @kbd{:}, @kbd{#}, +@kbd{;}, @kbd{,}, @kbd{<}, @kbd{>}, @kbd{/}, @kbd{*}, @kbd{(}, and +@kbd{)}. + + You might find electric indentation inconvenient if you are editing +chaotically indented code. If you are new to CC Mode, you might find +it disconcerting. You can toggle electric action with the command +@kbd{C-c C-l}; when it is enabled, @samp{/l} appears in the mode line +after the mode name: + +@table @kbd +@item C-c C-l +@kindex C-c C-l @r{(C mode)} +@findex c-toggle-electric-state +Toggle electric action (@code{c-toggle-electric-state}). With a +prefix argument, this command enables electric action if the argument +is positive, disables it if it is negative. +@end table + + Electric characters insert newlines only when, in addition to the +electric state, the @dfn{auto-newline} feature is enabled (indicated +by @samp{/la} in the mode line after the mode name). You can turn +this feature on or off with the command @kbd{C-c C-a}: + +@table @kbd +@item C-c C-a +@kindex C-c C-a @r{(C mode)} +@findex c-toggle-auto-newline +Toggle the auto-newline feature (@code{c-toggle-auto-newline}). With a +prefix argument, this command turns the auto-newline feature on if the +argument is positive, and off if it is negative. +@end table + + Usually the CC Mode style configures the exact circumstances in +which Emacs inserts auto-newlines. You can also configure this +directly. @xref{Custom Auto-newlines,,, ccmode, The CC Mode Manual}. + +@node Hungry Delete +@subsection Hungry Delete Feature in C +@cindex hungry deletion (C Mode) + + If you want to delete an entire block of whitespace at point, you +can use @dfn{hungry deletion}. This deletes all the contiguous +whitespace either before point or after point in a single operation. +@dfn{Whitespace} here includes tabs and newlines, but not comments or +preprocessor commands. + +@table @kbd +@item C-c C-@key{DEL} +@itemx C-c @key{DEL} +@findex c-hungry-delete-backwards +@kindex C-c C-@key{DEL} (C Mode) +@kindex C-c @key{DEL} (C Mode) +@code{c-hungry-delete-backwards}---Delete the entire block of whitespace +preceding point. + +@item C-c C-d +@itemx C-c C-@key{DELETE} +@itemx C-c @key{DELETE} +@findex c-hungry-delete-forward +@kindex C-c C-d (C Mode) +@kindex C-c C-@key{DELETE} (C Mode) +@kindex C-c @key{DELETE} (C Mode) +@code{c-hungry-delete-forward}---Delete the entire block of whitespace +following point. +@end table + + As an alternative to the above commands, you can enable @dfn{hungry +delete mode}. When this feature is enabled (indicated by @samp{/h} in +the mode line after the mode name), a single @key{DEL} deletes all +preceding whitespace, not just one space, and a single @kbd{C-c C-d} +(but @emph{not} plain @key{DELETE}) deletes all following whitespace. + +@table @kbd +@item M-x c-toggle-hungry-state +@findex c-toggle-hungry-state +Toggle the hungry-delete feature +(@code{c-toggle-hungry-state})@footnote{This command had the binding +@kbd{C-c C-d} in earlier versions of Emacs. @kbd{C-c C-d} is now +bound to @code{c-hungry-delete-forward}.}. With a prefix argument, +this command turns the hungry-delete feature on if the argument is +positive, and off if it is negative. +@end table + +@vindex c-hungry-delete-key + The variable @code{c-hungry-delete-key} controls whether the +hungry-delete feature is enabled. + +@node Other C Commands +@subsection Other Commands for C Mode + +@table @kbd +@item C-c C-w +@itemx M-x c-subword-mode +@findex c-subword-mode +Enable (or disable) @dfn{subword mode}. In subword mode, Emacs's word +commands recognize upper case letters in +@samp{StudlyCapsIdentifiers} as word boundaries. This is indicated by +the flag @samp{/w} on the mode line after the mode name +(e.g. @samp{C/law}). You can even use @kbd{M-x c-subword-mode} in +non-CC Mode buffers. + +In the GNU project, we recommend using underscores to separate words +within an identifier in C or C++, rather than using case distinctions. + +@item M-x c-context-line-break +@findex c-context-line-break +This command inserts a line break and indents the new line in a manner +appropriate to the context. In normal code, it does the work of +@kbd{C-j} (@code{newline-and-indent}), in a C preprocessor line it +additionally inserts a @samp{\} at the line break, and within comments +it's like @kbd{M-j} (@code{c-indent-new-comment-line}). + +@code{c-context-line-break} isn't bound to a key by default, but it +needs a binding to be useful. The following code will bind it to +@kbd{C-j}. We use @code{c-initialization-hook} here to make sure +the keymap is loaded before we try to change it. + +@smallexample +(defun my-bind-clb () + (define-key c-mode-base-map "\C-j" 'c-context-line-break)) +(add-hook 'c-initialization-hook 'my-bind-clb) +@end smallexample + +@item C-M-h +Put mark at the end of a function definition, and put point at the +beginning (@code{c-mark-function}). + +@item M-q +@kindex M-q @r{(C mode)} +@findex c-fill-paragraph +Fill a paragraph, handling C and C++ comments (@code{c-fill-paragraph}). +If any part of the current line is a comment or within a comment, this +command fills the comment or the paragraph of it that point is in, +preserving the comment indentation and comment delimiters. + +@item C-c C-e +@cindex macro expansion in C +@cindex expansion of C macros +@findex c-macro-expand +@kindex C-c C-e @r{(C mode)} +Run the C preprocessor on the text in the region, and show the result, +which includes the expansion of all the macro calls +(@code{c-macro-expand}). The buffer text before the region is also +included in preprocessing, for the sake of macros defined there, but the +output from this part isn't shown. + +When you are debugging C code that uses macros, sometimes it is hard to +figure out precisely how the macros expand. With this command, you +don't have to figure it out; you can see the expansions. + +@item C-c C-\ +@findex c-backslash-region +@kindex C-c C-\ @r{(C mode)} +Insert or align @samp{\} characters at the ends of the lines of the +region (@code{c-backslash-region}). This is useful after writing or +editing a C macro definition. + +If a line already ends in @samp{\}, this command adjusts the amount of +whitespace before it. Otherwise, it inserts a new @samp{\}. However, +the last line in the region is treated specially; no @samp{\} is +inserted on that line, and any @samp{\} there is deleted. + +@item M-x cpp-highlight-buffer +@cindex preprocessor highlighting +@findex cpp-highlight-buffer +Highlight parts of the text according to its preprocessor conditionals. +This command displays another buffer named @samp{*CPP Edit*}, which +serves as a graphic menu for selecting how to display particular kinds +of conditionals and their contents. After changing various settings, +click on @samp{[A]pply these settings} (or go to that buffer and type +@kbd{a}) to rehighlight the C mode buffer accordingly. + +@item C-c C-s +@findex c-show-syntactic-information +@kindex C-c C-s @r{(C mode)} +Display the syntactic information about the current source line +(@code{c-show-syntactic-information}). This information directs how +the line is indented. + +@item M-x cwarn-mode +@itemx M-x global-cwarn-mode +@findex cwarn-mode +@findex global-cwarn-mode +@vindex global-cwarn-mode +@cindex CWarn mode +@cindex suspicious constructions in C, C++ +CWarn minor mode highlights certain suspicious C and C++ constructions: + +@itemize @bullet{} +@item +Assignments inside expressions. +@item +Semicolon following immediately after @samp{if}, @samp{for}, and @samp{while} +(except after a @samp{do @dots{} while} statement); +@item +C++ functions with reference parameters. +@end itemize + +@noindent +You can enable the mode for one buffer with the command @kbd{M-x +cwarn-mode}, or for all suitable buffers with the command @kbd{M-x +global-cwarn-mode} or by customizing the variable +@code{global-cwarn-mode}. You must also enable Font Lock mode to make +it work. + +@item M-x hide-ifdef-mode +@findex hide-ifdef-mode +@cindex Hide-ifdef mode +Hide-ifdef minor mode hides selected code within @samp{#if} and +@samp{#ifdef} preprocessor blocks. See the documentation string of +@code{hide-ifdef-mode} for more information. + +@item M-x ff-find-related-file +@cindex related files +@findex ff-find-related-file +@vindex ff-related-file-alist +Find a file ``related'' in a special way to the file visited by the +current buffer. Typically this will be the header file corresponding +to a C/C++ source file, or vice versa. The variable +@code{ff-related-file-alist} specifies how to compute related file +names. +@end table + +@node Asm Mode +@section Asm Mode + +@cindex Asm mode +@cindex assembler mode +Asm mode is a major mode for editing files of assembler code. It +defines these commands: + +@table @kbd +@item @key{TAB} +@code{tab-to-tab-stop}. +@item C-j +Insert a newline and then indent using @code{tab-to-tab-stop}. +@item : +Insert a colon and then remove the indentation from before the label +preceding colon. Then do @code{tab-to-tab-stop}. +@item ; +Insert or align a comment. +@end table + + The variable @code{asm-comment-char} specifies which character +starts comments in assembler syntax. + +@ifnottex +@include fortran-xtra.texi +@end ifnottex + +@ignore + arch-tag: c7ee7409-40a4-45c7-bfb7-ae7f2c74d0c0 +@end ignore diff --git a/doc/emacs/regs.texi b/doc/emacs/regs.texi new file mode 100644 index 00000000000..475a3b7b1b5 --- /dev/null +++ b/doc/emacs/regs.texi @@ -0,0 +1,330 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2001, 2002, +@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Registers, Display, CUA Bindings, Top +@chapter Registers +@cindex registers + + Emacs @dfn{registers} are compartments where you can save text, +rectangles, positions, and other things for later use. Once you save +text or a rectangle in a register, you can copy it into the buffer +once, or many times; you can move point to a position saved in a +register once, or many times. + +@findex view-register + Each register has a name, which consists of a single character. A +register can store a number, a piece of text, a rectangle, a position, +a window configuration, or a file name, but only one thing at any +given time. Whatever you store in a register remains there until you +store something else in that register. To see what a register @var{r} +contains, use @kbd{M-x view-register}. + +@table @kbd +@item M-x view-register @key{RET} @var{r} +Display a description of what register @var{r} contains. +@end table + + @dfn{Bookmarks} record files and positions in them, so you can +return to those positions when you look at the file again. +Bookmarks are similar enough in spirit to registers that they +seem to belong in this chapter. + +@menu +* Position: RegPos. Saving positions in registers. +* Text: RegText. Saving text in registers. +* Rectangle: RegRect. Saving rectangles in registers. +* Configurations: RegConfig. Saving window configurations in registers. +* Numbers: RegNumbers. Numbers in registers. +* Files: RegFiles. File names in registers. +* Bookmarks:: Bookmarks are like registers, but persistent. +@end menu + +@node RegPos +@section Saving Positions in Registers +@cindex saving position in a register + + Saving a position records a place in a buffer so that you can move +back there later. Moving to a saved position switches to that buffer +and moves point to that place in it. + +@table @kbd +@item C-x r @key{SPC} @var{r} +Save position of point in register @var{r} (@code{point-to-register}). +@item C-x r j @var{r} +Jump to the position saved in register @var{r} (@code{jump-to-register}). +@end table + +@kindex C-x r SPC +@findex point-to-register + To save the current position of point in a register, choose a name +@var{r} and type @kbd{C-x r @key{SPC} @var{r}}. The register @var{r} +retains the position thus saved until you store something else in that +register. + +@kindex C-x r j +@findex jump-to-register + The command @kbd{C-x r j @var{r}} moves point to the position recorded +in register @var{r}. The register is not affected; it continues to +hold the same position. You can jump to the saved position any number +of times. + + If you use @kbd{C-x r j} to go to a saved position, but the buffer it +was saved from has been killed, @kbd{C-x r j} tries to create the buffer +again by visiting the same file. Of course, this works only for buffers +that were visiting files. + +@node RegText +@section Saving Text in Registers +@cindex saving text in a register + + When you want to insert a copy of the same piece of text several +times, it may be inconvenient to yank it from the kill ring, since each +subsequent kill moves that entry further down the ring. An alternative +is to store the text in a register and later retrieve it. + +@table @kbd +@item C-x r s @var{r} +Copy region into register @var{r} (@code{copy-to-register}). +@item C-x r i @var{r} +Insert text from register @var{r} (@code{insert-register}). +@item M-x append-to-register @key{RET} @var{r} +Append region to text in register @var{r}. +@item M-x prepend-to-register @key{RET} @var{r} +Prepend region to text in register @var{r}. +@end table + +@kindex C-x r s +@kindex C-x r i +@findex copy-to-register +@findex insert-register + @kbd{C-x r s @var{r}} stores a copy of the text of the region into +the register named @var{r}. @kbd{C-u C-x r s @var{r}}, the same +command with a numeric argument, deletes the text from the buffer as +well; you can think of this as ``moving'' the region text into the register. + +@findex append-to-register +@findex prepend-to-register + @kbd{M-x append-to-register @key{RET} @var{r}} appends the copy of +the text in the region to the text already stored in the register +named @var{r}. If invoked with a numeric argument, it deletes the +region after appending it to the register. The command +@code{prepend-to-register} is similar, except that it @emph{prepends} +the region text to the text in the register, rather than +@emph{appending} it. + + @kbd{C-x r i @var{r}} inserts in the buffer the text from register +@var{r}. Normally it leaves point before the text and places the mark +after, but with a numeric argument (@kbd{C-u}) it puts point after the +text and the mark before. + +@node RegRect +@section Saving Rectangles in Registers +@cindex saving rectangle in a register + + A register can contain a rectangle instead of linear text. The +rectangle is represented as a list of strings. @xref{Rectangles}, for +basic information on how to specify a rectangle in the buffer. + +@table @kbd +@findex copy-rectangle-to-register +@kindex C-x r r +@item C-x r r @var{r} +Copy the region-rectangle into register @var{r} +(@code{copy-rectangle-to-register}). With numeric argument, delete it as +well. +@item C-x r i @var{r} +Insert the rectangle stored in register @var{r} (if it contains a +rectangle) (@code{insert-register}). +@end table + + The @kbd{C-x r i @var{r}} command inserts a text string if the +register contains one, and inserts a rectangle if the register contains +one. + + See also the command @code{sort-columns}, which you can think of +as sorting a rectangle. @xref{Sorting}. + +@node RegConfig +@section Saving Window Configurations in Registers +@cindex saving window configuration in a register + +@findex window-configuration-to-register +@findex frame-configuration-to-register +@kindex C-x r w +@kindex C-x r f + You can save the window configuration of the selected frame in a +register, or even the configuration of all windows in all frames, and +restore the configuration later. + +@table @kbd +@item C-x r w @var{r} +Save the state of the selected frame's windows in register @var{r} +(@code{window-configuration-to-register}). +@item C-x r f @var{r} +Save the state of all frames, including all their windows, in register +@var{r} (@code{frame-configuration-to-register}). +@end table + + Use @kbd{C-x r j @var{r}} to restore a window or frame configuration. +This is the same command used to restore a cursor position. When you +restore a frame configuration, any existing frames not included in the +configuration become invisible. If you wish to delete these frames +instead, use @kbd{C-u C-x r j @var{r}}. + +@node RegNumbers +@section Keeping Numbers in Registers +@cindex saving number in a register + + There are commands to store a number in a register, to insert +the number in the buffer in decimal, and to increment it. These commands +can be useful in keyboard macros (@pxref{Keyboard Macros}). + +@table @kbd +@item C-u @var{number} C-x r n @var{r} +@kindex C-x r n +@findex number-to-register +Store @var{number} into register @var{r} (@code{number-to-register}). +@item C-u @var{number} C-x r + @var{r} +@kindex C-x r + +@findex increment-register +Increment the number in register @var{r} by @var{number} +(@code{increment-register}). +@item C-x r i @var{r} +Insert the number from register @var{r} into the buffer. +@end table + + @kbd{C-x r i} is the same command used to insert any other sort of +register contents into the buffer. @kbd{C-x r +} with no numeric +argument increments the register value by 1; @kbd{C-x r n} with no +numeric argument stores zero in the register. + +@node RegFiles +@section Keeping File Names in Registers +@cindex saving file name in a register + + If you visit certain file names frequently, you can visit them more +conveniently if you put their names in registers. Here's the Lisp code +used to put a file name in a register: + +@smallexample +(set-register ?@var{r} '(file . @var{name})) +@end smallexample + +@need 3000 +@noindent +For example, + +@smallexample +(set-register ?z '(file . "/gd/gnu/emacs/19.0/src/ChangeLog")) +@end smallexample + +@noindent +puts the file name shown in register @samp{z}. + + To visit the file whose name is in register @var{r}, type @kbd{C-x r j +@var{r}}. (This is the same command used to jump to a position or +restore a frame configuration.) + +@node Bookmarks +@section Bookmarks +@cindex bookmarks + + @dfn{Bookmarks} are somewhat like registers in that they record +positions you can jump to. Unlike registers, they have long names, and +they persist automatically from one Emacs session to the next. The +prototypical use of bookmarks is to record ``where you were reading'' in +various files. + +@table @kbd +@item C-x r m @key{RET} +Set the bookmark for the visited file, at point. + +@item C-x r m @var{bookmark} @key{RET} +@findex bookmark-set +Set the bookmark named @var{bookmark} at point (@code{bookmark-set}). + +@item C-x r b @var{bookmark} @key{RET} +@findex bookmark-jump +Jump to the bookmark named @var{bookmark} (@code{bookmark-jump}). + +@item C-x r l +@findex list-bookmarks +List all bookmarks (@code{list-bookmarks}). + +@item M-x bookmark-save +@findex bookmark-save +Save all the current bookmark values in the default bookmark file. +@end table + +@kindex C-x r m +@findex bookmark-set +@kindex C-x r b +@findex bookmark-jump + The prototypical use for bookmarks is to record one current position +in each of several files. So the command @kbd{C-x r m}, which sets a +bookmark, uses the visited file name as the default for the bookmark +name. If you name each bookmark after the file it points to, then you +can conveniently revisit any of those files with @kbd{C-x r b}, and move +to the position of the bookmark at the same time. + +@kindex C-x r l + To display a list of all your bookmarks in a separate buffer, type +@kbd{C-x r l} (@code{list-bookmarks}). If you switch to that buffer, +you can use it to edit your bookmark definitions or annotate the +bookmarks. Type @kbd{C-h m} in the bookmark buffer for more +information about its special editing commands. + + When you kill Emacs, Emacs offers to save your bookmark values in your +default bookmark file, @file{~/.emacs.bmk}, if you have changed any +bookmark values. You can also save the bookmarks at any time with the +@kbd{M-x bookmark-save} command. The bookmark commands load your +default bookmark file automatically. This saving and loading is how +bookmarks persist from one Emacs session to the next. + +@vindex bookmark-save-flag + If you set the variable @code{bookmark-save-flag} to 1, then each +command that sets a bookmark will also save your bookmarks; this way, +you don't lose any bookmark values even if Emacs crashes. (The value, +if a number, says how many bookmark modifications should go by between +saving.) + +@vindex bookmark-search-size + Bookmark position values are saved with surrounding context, so that +@code{bookmark-jump} can find the proper position even if the file is +modified slightly. The variable @code{bookmark-search-size} says how +many characters of context to record on each side of the bookmark's +position. + + Here are some additional commands for working with bookmarks: + +@table @kbd +@item M-x bookmark-load @key{RET} @var{filename} @key{RET} +@findex bookmark-load +Load a file named @var{filename} that contains a list of bookmark +values. You can use this command, as well as @code{bookmark-write}, to +work with other files of bookmark values in addition to your default +bookmark file. + +@item M-x bookmark-write @key{RET} @var{filename} @key{RET} +@findex bookmark-write +Save all the current bookmark values in the file @var{filename}. + +@item M-x bookmark-delete @key{RET} @var{bookmark} @key{RET} +@findex bookmark-delete +Delete the bookmark named @var{bookmark}. + +@item M-x bookmark-insert-location @key{RET} @var{bookmark} @key{RET} +@findex bookmark-insert-location +Insert in the buffer the name of the file that bookmark @var{bookmark} +points to. + +@item M-x bookmark-insert @key{RET} @var{bookmark} @key{RET} +@findex bookmark-insert +Insert in the buffer the @emph{contents} of the file that bookmark +@var{bookmark} points to. +@end table + +@ignore + arch-tag: b00af991-ebc3-4b3a-8e82-a3ac81ff2e64 +@end ignore diff --git a/doc/emacs/rmail.texi b/doc/emacs/rmail.texi new file mode 100644 index 00000000000..7c36a31ff18 --- /dev/null +++ b/doc/emacs/rmail.texi @@ -0,0 +1,1430 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2001, 2002, +@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Rmail, Dired, Sending Mail, Top +@chapter Reading Mail with Rmail +@cindex Rmail +@cindex reading mail +@findex rmail +@findex rmail-mode +@vindex rmail-mode-hook + + Rmail is an Emacs subsystem for reading and disposing of mail that +you receive. Rmail stores mail messages in files called Rmail files +which use a special format. Reading the message in an Rmail file is +done in a special major mode, Rmail mode, which redefines most letters +to run commands for managing mail. +@menu +* Basic: Rmail Basics. Basic concepts of Rmail, and simple use. +* Scroll: Rmail Scrolling. Scrolling through a message. +* Motion: Rmail Motion. Moving to another message. +* Deletion: Rmail Deletion. Deleting and expunging messages. +* Inbox: Rmail Inbox. How mail gets into the Rmail file. +* Files: Rmail Files. Using multiple Rmail files. +* Output: Rmail Output. Copying message out to files. +* Labels: Rmail Labels. Classifying messages by labeling them. +* Attrs: Rmail Attributes. Certain standard labels, called attributes. +* Reply: Rmail Reply. Sending replies to messages you are viewing. +* Summary: Rmail Summary. Summaries show brief info on many messages. +* Sort: Rmail Sorting. Sorting messages in Rmail. +* Display: Rmail Display. How Rmail displays a message; customization. +* Coding: Rmail Coding. How Rmail handles decoding character sets. +* Editing: Rmail Editing. Editing message text and headers in Rmail. +* Digest: Rmail Digest. Extracting the messages from a digest message. +* Out of Rmail:: Converting an Rmail file to mailbox format. +* Rot13: Rmail Rot13. Reading messages encoded in the rot13 code. +* Movemail:: More details of fetching new mail. +* Remote Mailboxes:: Retrieving Mail from Remote Mailboxes. +* Other Mailbox Formats:: Retrieving Mail from Local Mailboxes in + Various Formats +@end menu + +@node Rmail Basics +@section Basic Concepts of Rmail + +@cindex primary Rmail file +@vindex rmail-file-name + Using Rmail in the simplest fashion, you have one Rmail file +@file{~/RMAIL} in which all of your mail is saved. It is called your +@dfn{primary Rmail file}. The command @kbd{M-x rmail} reads your primary +Rmail file, merges new mail in from your inboxes, displays the first +message you haven't read yet, and lets you begin reading. The variable +@code{rmail-file-name} specifies the name of the primary Rmail file. + + Rmail uses narrowing to hide all but one message in the Rmail file. +The message that is shown is called the @dfn{current message}. Rmail +mode's special commands can do such things as delete the current +message, copy it into another file, send a reply, or move to another +message. You can also create multiple Rmail files and use Rmail to move +messages between them. + +@cindex message number + Within the Rmail file, messages are normally arranged sequentially in +order of receipt; you can specify other ways to sort them. Messages are +identified by consecutive integers which are their @dfn{message numbers}. +The number of the current message is displayed in Rmail's mode line, +followed by the total number of messages in the file. You can move to +a message by specifying its message number with the @kbd{j} key +(@pxref{Rmail Motion}). + +@kindex s @r{(Rmail)} +@findex rmail-expunge-and-save + Following the usual conventions of Emacs, changes in an Rmail file +become permanent only when you save the file. You can save it with +@kbd{s} (@code{rmail-expunge-and-save}), which also expunges deleted +messages from the file first (@pxref{Rmail Deletion}). To save the +file without expunging, use @kbd{C-x C-s}. Rmail also saves the Rmail +file after merging new mail from an inbox file (@pxref{Rmail Inbox}). + +@kindex q @r{(Rmail)} +@findex rmail-quit +@kindex b @r{(Rmail)} +@findex rmail-bury + You can exit Rmail with @kbd{q} (@code{rmail-quit}); this expunges +and saves the Rmail file, then buries the Rmail buffer as well as its +summary buffer, if present (@pxref{Rmail Summary}). But there is no +need to ``exit'' formally. If you switch from Rmail to editing in +other buffers, and never switch back, you have exited. Just make sure +to save the Rmail file eventually (like any other file you have +changed). @kbd{C-x s} is a suitable way to do this (@pxref{Save +Commands}). The Rmail command @kbd{b}, @code{rmail-bury}, buries the +Rmail buffer and its summary buffer without expunging and saving the +Rmail file. + +@node Rmail Scrolling +@section Scrolling Within a Message + + When Rmail displays a message that does not fit on the screen, you +must scroll through it to read the rest. You could do this with +@kbd{C-v}, @kbd{M-v} and @kbd{M-<}, but in Rmail scrolling is so +frequent that it deserves to be easier. + +@table @kbd +@item @key{SPC} +Scroll forward (@code{scroll-up}). +@item @key{DEL} +Scroll backward (@code{scroll-down}). +@item . +Scroll to start of message (@code{rmail-beginning-of-message}). +@item / +Scroll to end of message (@code{rmail-end-of-message}). +@end table + +@kindex SPC @r{(Rmail)} +@kindex DEL @r{(Rmail)} + Since the most common thing to do while reading a message is to scroll +through it by screenfuls, Rmail makes @key{SPC} and @key{DEL} synonyms of +@kbd{C-v} (@code{scroll-up}) and @kbd{M-v} (@code{scroll-down}) + +@kindex . @r{(Rmail)} +@kindex / @r{(Rmail)} +@findex rmail-beginning-of-message +@findex rmail-end-of-message + The command @kbd{.} (@code{rmail-beginning-of-message}) scrolls back to the +beginning of the selected message. This is not quite the same as @kbd{M-<}: +for one thing, it does not set the mark; for another, it resets the buffer +boundaries to the current message if you have changed them. Similarly, +the command @kbd{/} (@code{rmail-end-of-message}) scrolls forward to the end +of the selected message. + +@node Rmail Motion +@section Moving Among Messages + + The most basic thing to do with a message is to read it. The way to +do this in Rmail is to make the message current. The usual practice is +to move sequentially through the file, since this is the order of +receipt of messages. When you enter Rmail, you are positioned at the +first message that you have not yet made current (that is, the first one +that has the @samp{unseen} attribute; @pxref{Rmail Attributes}). Move +forward to see the other new messages; move backward to re-examine old +messages. + +@table @kbd +@item n +Move to the next nondeleted message, skipping any intervening deleted +messages (@code{rmail-next-undeleted-message}). +@item p +Move to the previous nondeleted message +(@code{rmail-previous-undeleted-message}). +@item M-n +Move to the next message, including deleted messages +(@code{rmail-next-message}). +@item M-p +Move to the previous message, including deleted messages +(@code{rmail-previous-message}). +@item j +Move to the first message. With argument @var{n}, move to +message number @var{n} (@code{rmail-show-message}). +@item > +Move to the last message (@code{rmail-last-message}). +@item < +Move to the first message (@code{rmail-first-message}). + +@item M-s @var{regexp} @key{RET} +Move to the next message containing a match for @var{regexp} +(@code{rmail-search}). + +@item - M-s @var{regexp} @key{RET} +Move to the previous message containing a match for @var{regexp}. +@end table + +@kindex n @r{(Rmail)} +@kindex p @r{(Rmail)} +@kindex M-n @r{(Rmail)} +@kindex M-p @r{(Rmail)} +@findex rmail-next-undeleted-message +@findex rmail-previous-undeleted-message +@findex rmail-next-message +@findex rmail-previous-message + @kbd{n} and @kbd{p} are the usual way of moving among messages in +Rmail. They move through the messages sequentially, but skip over +deleted messages, which is usually what you want to do. Their command +definitions are named @code{rmail-next-undeleted-message} and +@code{rmail-previous-undeleted-message}. If you do not want to skip +deleted messages---for example, if you want to move to a message to +undelete it---use the variants @kbd{M-n} and @kbd{M-p} +(@code{rmail-next-message} and @code{rmail-previous-message}). A +numeric argument to any of these commands serves as a repeat +count. + + In Rmail, you can specify a numeric argument by typing just the +digits. You don't need to type @kbd{C-u} first. + +@kindex M-s @r{(Rmail)} +@findex rmail-search +@cindex searching in Rmail + The @kbd{M-s} (@code{rmail-search}) command is Rmail's version of +search. The usual incremental search command @kbd{C-s} works in Rmail, +but it searches only within the current message. The purpose of +@kbd{M-s} is to search for another message. It reads a regular +expression (@pxref{Regexps}) nonincrementally, then searches starting at +the beginning of the following message for a match. It then selects +that message. If @var{regexp} is empty, @kbd{M-s} reuses the regexp +used the previous time. + + To search backward in the file for another message, give @kbd{M-s} a +negative argument. In Rmail you can do this with @kbd{- M-s}. + + It is also possible to search for a message based on labels. +@xref{Rmail Labels}. + +@kindex j @r{(Rmail)} +@kindex > @r{(Rmail)} +@kindex < @r{(Rmail)} +@findex rmail-show-message +@findex rmail-last-message +@findex rmail-first-message + To move to a message specified by absolute message number, use @kbd{j} +(@code{rmail-show-message}) with the message number as argument. With +no argument, @kbd{j} selects the first message. @kbd{<} +(@code{rmail-first-message}) also selects the first message. @kbd{>} +(@code{rmail-last-message}) selects the last message. + +@node Rmail Deletion +@section Deleting Messages + +@cindex deletion (Rmail) + When you no longer need to keep a message, you can @dfn{delete} it. This +flags it as ignorable, and some Rmail commands pretend it is no longer +present; but it still has its place in the Rmail file, and still has its +message number. + +@cindex expunging (Rmail) + @dfn{Expunging} the Rmail file actually removes the deleted messages. +The remaining messages are renumbered consecutively. Expunging is the only +action that changes the message number of any message, except for +undigestifying (@pxref{Rmail Digest}). + +@table @kbd +@item d +Delete the current message, and move to the next nondeleted message +(@code{rmail-delete-forward}). +@item C-d +Delete the current message, and move to the previous nondeleted +message (@code{rmail-delete-backward}). +@item u +Undelete the current message, or move back to a deleted message and +undelete it (@code{rmail-undelete-previous-message}). +@item x +Expunge the Rmail file (@code{rmail-expunge}). +@end table + +@kindex d @r{(Rmail)} +@kindex C-d @r{(Rmail)} +@findex rmail-delete-forward +@findex rmail-delete-backward + There are two Rmail commands for deleting messages. Both delete the +current message and select another message. @kbd{d} +(@code{rmail-delete-forward}) moves to the following message, skipping +messages already deleted, while @kbd{C-d} (@code{rmail-delete-backward}) +moves to the previous nondeleted message. If there is no nondeleted +message to move to in the specified direction, the message that was just +deleted remains current. @kbd{d} with a numeric argument is +equivalent to @kbd{C-d}. + +@vindex rmail-delete-message-hook + Whenever Rmail deletes a message, it runs the hook +@code{rmail-delete-message-hook}. When the hook functions are invoked, +the message has been marked deleted, but it is still the current message +in the Rmail buffer. + +@cindex undeletion (Rmail) +@kindex x @r{(Rmail)} +@findex rmail-expunge +@kindex u @r{(Rmail)} +@findex rmail-undelete-previous-message + To make all the deleted messages finally vanish from the Rmail file, +type @kbd{x} (@code{rmail-expunge}). Until you do this, you can still +@dfn{undelete} the deleted messages. The undeletion command, @kbd{u} +(@code{rmail-undelete-previous-message}), is designed to cancel the +effect of a @kbd{d} command in most cases. It undeletes the current +message if the current message is deleted. Otherwise it moves backward +to previous messages until a deleted message is found, and undeletes +that message. + + You can usually undo a @kbd{d} with a @kbd{u} because the @kbd{u} +moves back to and undeletes the message that the @kbd{d} deleted. But +this does not work when the @kbd{d} skips a few already-deleted messages +that follow the message being deleted; then the @kbd{u} command +undeletes the last of the messages that were skipped. There is no clean +way to avoid this problem. However, by repeating the @kbd{u} command, +you can eventually get back to the message that you intend to +undelete. You can also select a particular deleted message with +the @kbd{M-p} command, then type @kbd{u} to undelete it. + + A deleted message has the @samp{deleted} attribute, and as a result +@samp{deleted} appears in the mode line when the current message is +deleted. In fact, deleting or undeleting a message is nothing more than +adding or removing this attribute. @xref{Rmail Attributes}. + +@node Rmail Inbox +@section Rmail Files and Inboxes +@cindex inbox file + + When you receive mail locally, the operating system places incoming +mail for you in a file that we call your @dfn{inbox}. When you start +up Rmail, it runs a C program called @code{movemail} to copy the new +messages from your local inbox into your primary Rmail file, which +also contains other messages saved from previous Rmail sessions. It +is in this file that you actually read the mail with Rmail. This +operation is called @dfn{getting new mail}. You can get new mail at +any time in Rmail by typing @kbd{g}. + +@vindex rmail-primary-inbox-list +@cindex @env{MAIL} environment variable + The variable @code{rmail-primary-inbox-list} contains a list of the +files which are inboxes for your primary Rmail file. If you don't set +this variable explicitly, it is initialized from the @env{MAIL} +environment variable, or, as a last resort, set to @code{nil}, which +means to use the default inbox. The default inbox file depends on +your operating system; often it is @file{/var/mail/@var{username}}, +@file{/usr/spool/mail/@var{username}}, or +@file{/usr/mail/@var{username}}. + + You can specify the inbox file(s) for any Rmail file with the +command @code{set-rmail-inbox-list}; see @ref{Rmail Files}. + + There are two reasons for having separate Rmail files and inboxes. + +@enumerate +@item +The inbox file format varies between operating systems and according to +the other mail software in use. Only one part of Rmail needs to know +about the alternatives, and it need only understand how to convert all +of them to Rmail's own format. + +@item +It is very cumbersome to access an inbox file without danger of losing +mail, because it is necessary to interlock with mail delivery. +Moreover, different operating systems use different interlocking +techniques. The strategy of moving mail out of the inbox once and for +all into a separate Rmail file avoids the need for interlocking in all +the rest of Rmail, since only Rmail operates on the Rmail file. +@end enumerate + + Rmail was written to use Babyl format as its internal format. Since +then, we have recognized that the usual inbox format on Unix and GNU +systems is adequate for the job, and we plan to change Rmail to use that +as its internal format. However, the Rmail file will still be separate +from the inbox file, even when their format is the same. + +@vindex rmail-preserve-inbox + When getting new mail, Rmail first copies the new mail from the +inbox file to the Rmail file; then it saves the Rmail file; then it +clears out the inbox file. This way, a system crash may cause +duplication of mail between the inbox and the Rmail file, but cannot +lose mail. If @code{rmail-preserve-inbox} is non-@code{nil}, then +Rmail does not clear out the inbox file when it gets new mail. You +may wish to set this, for example, on a portable computer you use to +check your mail via POP while traveling, so that your mail will remain +on the server and you can save it later on your workstation. + + In some cases, Rmail copies the new mail from the inbox file +indirectly. First it runs the @code{movemail} program to move the mail +from the inbox to an intermediate file called +@file{~/.newmail-@var{inboxname}}. Then Rmail merges the new mail from +that file, saves the Rmail file, and only then deletes the intermediate +file. If there is a crash at the wrong time, this file continues to +exist, and Rmail will use it again the next time it gets new mail from +that inbox. + + If Rmail is unable to convert the data in +@file{~/.newmail-@var{inboxname}} into Babyl format, it renames the file +to @file{~/RMAILOSE.@var{n}} (@var{n} is an integer chosen to make the +name unique) so that Rmail will not have trouble with the data again. +You should look at the file, find whatever message confuses Rmail +(probably one that includes the control-underscore character, octal code +037), and delete it. Then you can use @kbd{1 g} to get new mail from +the corrected file. + +@node Rmail Files +@section Multiple Rmail Files + + Rmail operates by default on your @dfn{primary Rmail file}, which is named +@file{~/RMAIL} and receives your incoming mail from your system inbox file. +But you can also have other Rmail files and edit them with Rmail. These +files can receive mail through their own inboxes, or you can move messages +into them with explicit Rmail commands (@pxref{Rmail Output}). + +@table @kbd +@item i @var{file} @key{RET} +Read @var{file} into Emacs and run Rmail on it (@code{rmail-input}). + +@item M-x set-rmail-inbox-list @key{RET} @var{files} @key{RET} +Specify inbox file names for current Rmail file to get mail from. + +@item g +Merge new mail from current Rmail file's inboxes +(@code{rmail-get-new-mail}). + +@item C-u g @var{file} @key{RET} +Merge new mail from inbox file @var{file}. +@end table + +@kindex i @r{(Rmail)} +@findex rmail-input + To run Rmail on a file other than your primary Rmail file, you can use +the @kbd{i} (@code{rmail-input}) command in Rmail. This visits the file +in Rmail mode. You can use @kbd{M-x rmail-input} even when not in +Rmail, but it is easier to type @kbd{C-u M-x rmail}, which does the +same thing. + + The file you read with @kbd{i} should normally be a valid Rmail file. +If it is not, Rmail tries to decompose it into a stream of messages in +various known formats. If it succeeds, it converts the whole file to an +Rmail file. If you specify a file name that doesn't exist, @kbd{i} +initializes a new buffer for creating a new Rmail file. + +@vindex rmail-secondary-file-directory +@vindex rmail-secondary-file-regexp + You can also select an Rmail file from a menu. In the Classify menu, +choose the Input Rmail File item; then choose the Rmail file you want. +The variables @code{rmail-secondary-file-directory} and +@code{rmail-secondary-file-regexp} specify which files to offer in the +menu: the first variable says which directory to find them in; the +second says which files in that directory to offer (all those that +match the regular expression). These variables also apply to choosing +a file for output (@pxref{Rmail Output}). + +@findex set-rmail-inbox-list + Each Rmail file can contain a list of inbox file names; you can specify +this list with @kbd{M-x set-rmail-inbox-list @key{RET} @var{files} +@key{RET}}. The argument can contain any number of file names, separated +by commas. It can also be empty, which specifies that this file should +have no inboxes. Once you specify a list of inboxes in an Rmail file, +the Rmail file remembers it permanently until you specify a different list. + + As a special exception, if your primary Rmail file does not specify any +inbox files, it uses your standard system inbox. + +@kindex g @r{(Rmail)} +@findex rmail-get-new-mail + The @kbd{g} command (@code{rmail-get-new-mail}) merges mail into the +current Rmail file from its inboxes. If the Rmail file has no +inboxes, @kbd{g} does nothing. The command @kbd{M-x rmail} also +merges new mail into your primary Rmail file. + + To merge mail from a file that is not the usual inbox, give the +@kbd{g} key a numeric argument, as in @kbd{C-u g}. Then it reads a file +name and merges mail from that file. The inbox file is not deleted or +changed in any way when @kbd{g} with an argument is used. This is, +therefore, a general way of merging one file of messages into another. + +@node Rmail Output +@section Copying Messages Out to Files + + These commands copy messages from an Rmail file into another file. + +@table @kbd +@item o @var{file} @key{RET} +Append a copy of the current message to the file @var{file}, using Rmail +file format by default (@code{rmail-output-to-rmail-file}). + +@item C-o @var{file} @key{RET} +Append a copy of the current message to the file @var{file}, using +system inbox file format by default (@code{rmail-output}). + +@item w @var{file} @key{RET} +Output just the message body to the file @var{file}, taking the default +file name from the message @samp{Subject} header. +@end table + +@kindex o @r{(Rmail)} +@findex rmail-output-to-rmail-file +@kindex C-o @r{(Rmail)} +@findex rmail-output + The commands @kbd{o} and @kbd{C-o} copy the current message into a +specified file. This file may be an Rmail file or it may be in system +inbox format; the output commands ascertain the file's format and write +the copied message in that format. + + The @kbd{o} and @kbd{C-o} commands differ in two ways: each has its +own separate default file name, and each specifies a choice of format to +use when the file does not already exist. The @kbd{o} command uses +Rmail format when it creates a new file, while @kbd{C-o} uses system +inbox format for a new file. The default file name for @kbd{o} is the +file name used last with @kbd{o}, and the default file name for +@kbd{C-o} is the file name used last with @kbd{C-o}. + + If the output file is an Rmail file currently visited in an Emacs buffer, +the output commands copy the message into that buffer. It is up to you +to save the buffer eventually in its file. + +@kindex w @r{(Rmail)} +@findex rmail-output-body-to-file + Sometimes you may receive a message whose body holds the contents of a +file. You can save the body to a file (excluding the message header) +with the @kbd{w} command (@code{rmail-output-body-to-file}). Often +these messages contain the intended file name in the @samp{Subject} +field, so the @kbd{w} command uses the @samp{Subject} field as the +default for the output file name. However, the file name is read using +the minibuffer, so you can specify a different name if you wish. + + You can also output a message to an Rmail file chosen with a menu. +In the Classify menu, choose the Output Rmail File menu item; then +choose the Rmail file you want. This outputs the current message to +that file, like the @kbd{o} command. The variables +@code{rmail-secondary-file-directory} and +@code{rmail-secondary-file-regexp} specify which files to offer in the +menu: the first variable says which directory to find them in; the +second says which files in that directory to offer (all those that +match the regular expression). + +@vindex rmail-delete-after-output + Copying a message with @kbd{o} or @kbd{C-o} gives the original copy +of the message the @samp{filed} attribute, so that @samp{filed} +appears in the mode line when such a message is current. @kbd{w} +gives it the @samp{stored} attribute. If you like to keep just a +single copy of every mail message, set the variable +@code{rmail-delete-after-output} to @code{t}; then the @kbd{o}, +@kbd{C-o} and @kbd{w} commands delete the original message after +copying it. (You can undelete the original afterward if you wish.) + + Copying messages into files in system inbox format uses the header +fields that are displayed in Rmail at the time. Thus, if you use the +@kbd{t} command to view the entire header and then copy the message, the +entire header is copied. @xref{Rmail Display}. + +@vindex rmail-output-file-alist + The variable @code{rmail-output-file-alist} lets you specify +intelligent defaults for the output file, based on the contents of the +current message. The value should be a list whose elements have this +form: + +@example +(@var{regexp} . @var{name-exp}) +@end example + +@noindent +If there's a match for @var{regexp} in the current message, then the +default file name for output is @var{name-exp}. If multiple elements +match the message, the first matching element decides the default file +name. The subexpression @var{name-exp} may be a string constant giving +the file name to use, or more generally it may be any Lisp expression +that returns a file name as a string. @code{rmail-output-file-alist} +applies to both @kbd{o} and @kbd{C-o}. + +@node Rmail Labels +@section Labels +@cindex label (Rmail) +@cindex attribute (Rmail) + + Each message can have various @dfn{labels} assigned to it as a means +of classification. Each label has a name; different names are different +labels. Any given label is either present or absent on a particular +message. A few label names have standard meanings and are given to +messages automatically by Rmail when appropriate; these special labels +are called @dfn{attributes}. +@ifnottex +(@xref{Rmail Attributes}.) +@end ifnottex +All other labels are assigned only by users. + +@table @kbd +@item a @var{label} @key{RET} +Assign the label @var{label} to the current message (@code{rmail-add-label}). +@item k @var{label} @key{RET} +Remove the label @var{label} from the current message (@code{rmail-kill-label}). +@item C-M-n @var{labels} @key{RET} +Move to the next message that has one of the labels @var{labels} +(@code{rmail-next-labeled-message}). +@item C-M-p @var{labels} @key{RET} +Move to the previous message that has one of the labels @var{labels} +(@code{rmail-previous-labeled-message}). +@item l @var{labels} @key{RET} +@itemx C-M-l @var{labels} @key{RET} +Make a summary of all messages containing any of the labels @var{labels} +(@code{rmail-summary-by-labels}). +@end table + +@kindex a @r{(Rmail)} +@kindex k @r{(Rmail)} +@findex rmail-add-label +@findex rmail-kill-label + The @kbd{a} (@code{rmail-add-label}) and @kbd{k} +(@code{rmail-kill-label}) commands allow you to assign or remove any +label on the current message. If the @var{label} argument is empty, it +means to assign or remove the same label most recently assigned or +removed. + + Once you have given messages labels to classify them as you wish, there +are two ways to use the labels: in moving and in summaries. + +@kindex C-M-n @r{(Rmail)} +@kindex C-M-p @r{(Rmail)} +@findex rmail-next-labeled-message +@findex rmail-previous-labeled-message + The command @kbd{C-M-n @var{labels} @key{RET}} +(@code{rmail-next-labeled-message}) moves to the next message that has +one of the labels @var{labels}. The argument @var{labels} specifies one +or more label names, separated by commas. @kbd{C-M-p} +(@code{rmail-previous-labeled-message}) is similar, but moves backwards +to previous messages. A numeric argument to either command serves as a +repeat count. + + The command @kbd{C-M-l @var{labels} @key{RET}} +(@code{rmail-summary-by-labels}) displays a summary containing only the +messages that have at least one of a specified set of labels. The +argument @var{labels} is one or more label names, separated by commas. +@xref{Rmail Summary}, for information on summaries. + + If the @var{labels} argument to @kbd{C-M-n}, @kbd{C-M-p} or +@kbd{C-M-l} is empty, it means to use the last set of labels specified +for any of these commands. + +@node Rmail Attributes +@section Rmail Attributes + + Some labels such as @samp{deleted} and @samp{filed} have built-in +meanings, and Rmail assigns them to messages automatically at +appropriate times; these labels are called @dfn{attributes}. Here is +a list of Rmail attributes: + +@table @samp +@item unseen +Means the message has never been current. Assigned to messages when +they come from an inbox file, and removed when a message is made +current. When you start Rmail, it initially shows the first message +that has this attribute. +@item deleted +Means the message is deleted. Assigned by deletion commands and +removed by undeletion commands (@pxref{Rmail Deletion}). +@item filed +Means the message has been copied to some other file. Assigned by the +@kbd{o} and @kbd{C-o} file output commands (@pxref{Rmail Output}). +@item stored +Assigned by the @kbd{w} file output command (@pxref{Rmail Output}). +@item answered +Means you have mailed an answer to the message. Assigned by the @kbd{r} +command (@code{rmail-reply}). @xref{Rmail Reply}. +@item forwarded +Means you have forwarded the message. Assigned by the @kbd{f} command +(@code{rmail-forward}). @xref{Rmail Reply}. +@item edited +Means you have edited the text of the message within Rmail. +@xref{Rmail Editing}. +@item resent +Means you have resent the message. Assigned by the command @kbd{M-x +rmail-resend}. @xref{Rmail Reply}. +@end table + + All other labels are assigned or removed only by users, and have no +standard meaning. + +@node Rmail Reply +@section Sending Replies + + Rmail has several commands that use Mail mode to send outgoing mail. +@xref{Sending Mail}, for information on using Mail mode, including +certain features meant to work with Rmail. What this section documents +are the special commands of Rmail for entering Mail mode. Note that the +usual keys for sending mail---@kbd{C-x m}, @kbd{C-x 4 m}, and @kbd{C-x 5 +m}---also work normally in Rmail mode. + +@table @kbd +@item m +Send a message (@code{rmail-mail}). +@item c +Continue editing the already started outgoing message (@code{rmail-continue}). +@item r +Send a reply to the current Rmail message (@code{rmail-reply}). +@item f +Forward the current message to other users (@code{rmail-forward}). +@item C-u f +Resend the current message to other users (@code{rmail-resend}). +@item M-m +Try sending a bounced message a second time (@code{rmail-retry-failure}). +@end table + +@kindex r @r{(Rmail)} +@findex rmail-reply +@cindex reply to a message + The most common reason to send a message while in Rmail is to reply +to the message you are reading. To do this, type @kbd{r} +(@code{rmail-reply}). This displays the @samp{*mail*} buffer in +another window, much like @kbd{C-x 4 m}, but preinitializes the +@samp{Subject}, @samp{To}, @samp{CC}, @samp{In-reply-to} and +@samp{References} header fields based on the message you are replying +to. The @samp{To} field starts out as the address of the person who +sent the message you received, and the @samp{CC} field starts out with +all the other recipients of that message. + +@vindex rmail-dont-reply-to-names + You can exclude certain recipients from being placed automatically in +the @samp{CC}, using the variable @code{rmail-dont-reply-to-names}. Its +value should be a regular expression (as a string); any recipient that +the regular expression matches, is excluded from the @samp{CC} field. +The default value matches your own name, and any name starting with +@samp{info-}. (Those names are excluded because there is a convention +of using them for large mailing lists to broadcast announcements.) + + To omit the @samp{CC} field completely for a particular reply, enter +the reply command with a numeric argument: @kbd{C-u r} or @kbd{1 r}. +This means to reply only to the sender of the original message. + + Once the @samp{*mail*} buffer has been initialized, editing and +sending the mail goes as usual (@pxref{Sending Mail}). You can edit the +presupplied header fields if they are not what you want. You can also +use the commands of Mail mode (@pxref{Mail Mode}), including @kbd{C-c +C-y} which yanks in the message that you are replying to. You can +also switch to the Rmail buffer, select a different message there, switch +back, and yank the new current message. + +@kindex M-m @r{(Rmail)} +@findex rmail-retry-failure +@cindex retrying a failed message +@vindex rmail-retry-ignored-headers + Sometimes a message does not reach its destination. Mailers usually +send the failed message back to you, enclosed in a @dfn{failure +message}. The Rmail command @kbd{M-m} (@code{rmail-retry-failure}) +prepares to send the same message a second time: it sets up a +@samp{*mail*} buffer with the same text and header fields as before. If +you type @kbd{C-c C-c} right away, you send the message again exactly +the same as the first time. Alternatively, you can edit the text or +headers and then send it. The variable +@code{rmail-retry-ignored-headers}, in the same format as +@code{rmail-ignored-headers} (@pxref{Rmail Display}), controls which +headers are stripped from the failed message when retrying it. + +@kindex f @r{(Rmail)} +@findex rmail-forward +@cindex forwarding a message + Another frequent reason to send mail in Rmail is to @dfn{forward} the +current message to other users. @kbd{f} (@code{rmail-forward}) makes +this easy by preinitializing the @samp{*mail*} buffer with the current +message as the text, and a subject designating a forwarded message. All +you have to do is fill in the recipients and send. When you forward a +message, recipients get a message which is ``from'' you, and which has +the original message in its contents. + +@findex unforward-rmail-message + Forwarding a message encloses it between two delimiter lines. It also +modifies every line that starts with a dash, by inserting @w{@samp{- }} +at the start of the line. When you receive a forwarded message, if it +contains something besides ordinary text---for example, program source +code---you might find it useful to undo that transformation. You can do +this by selecting the forwarded message and typing @kbd{M-x +unforward-rmail-message}. This command extracts the original forwarded +message, deleting the inserted @w{@samp{- }} strings, and inserts it +into the Rmail file as a separate message immediately following the +current one. + +@findex rmail-resend + @dfn{Resending} is an alternative similar to forwarding; the +difference is that resending sends a message that is ``from'' the +original sender, just as it reached you---with a few added header fields +@samp{Resent-From} and @samp{Resent-To} to indicate that it came via +you. To resend a message in Rmail, use @kbd{C-u f}. (@kbd{f} runs +@code{rmail-forward}, which is programmed to invoke @code{rmail-resend} +if you provide a numeric argument.) + +@kindex m @r{(Rmail)} +@findex rmail-mail + The @kbd{m} (@code{rmail-mail}) command is used to start editing an +outgoing message that is not a reply. It leaves the header fields empty. +Its only difference from @kbd{C-x 4 m} is that it makes the Rmail buffer +accessible for @kbd{C-c C-y}, just as @kbd{r} does. Thus, @kbd{m} can be +used to reply to or forward a message; it can do anything @kbd{r} or @kbd{f} +can do. + +@kindex c @r{(Rmail)} +@findex rmail-continue + The @kbd{c} (@code{rmail-continue}) command resumes editing the +@samp{*mail*} buffer, to finish editing an outgoing message you were +already composing, or to alter a message you have sent. + +@vindex rmail-mail-new-frame + If you set the variable @code{rmail-mail-new-frame} to a +non-@code{nil} value, then all the Rmail commands to start sending a +message create a new frame to edit it in. This frame is deleted when +you send the message, or when you use the @samp{Cancel} item in the +@samp{Mail} menu. + + All the Rmail commands to send a message use the mail-composition +method that you have chosen (@pxref{Mail Methods}). + +@node Rmail Summary +@section Summaries +@cindex summary (Rmail) + + A @dfn{summary} is a buffer containing one line per message to give +you an overview of the mail in an Rmail file. Each line shows the +message number and date, the sender, the line count, the labels, and +the subject. Moving point in the summary buffer selects messages as +you move to their summary lines. Almost all Rmail commands are valid +in the summary buffer also; when used there, they apply to the message +described by the current line of the summary. + + A summary buffer applies to a single Rmail file only; if you are +editing multiple Rmail files, each one can have its own summary buffer. +The summary buffer name is made by appending @samp{-summary} to the +Rmail buffer's name. Normally only one summary buffer is displayed at a +time. + +@menu +* Rmail Make Summary:: Making various sorts of summaries. +* Rmail Summary Edit:: Manipulating messages from the summary. +@end menu + +@node Rmail Make Summary +@subsection Making Summaries + + Here are the commands to create a summary for the current Rmail file. +Once the Rmail file has a summary buffer, changes in the Rmail file +(such as deleting or expunging messages, and getting new mail) +automatically update the summary. + +@table @kbd +@item h +@itemx C-M-h +Summarize all messages (@code{rmail-summary}). +@item l @var{labels} @key{RET} +@itemx C-M-l @var{labels} @key{RET} +Summarize messages that have one or more of the specified labels +(@code{rmail-summary-by-labels}). +@item C-M-r @var{rcpts} @key{RET} +Summarize messages that have one or more of the specified recipients +(@code{rmail-summary-by-recipients}). +@item C-M-t @var{topic} @key{RET} +Summarize messages that have a match for the specified regexp +@var{topic} in their subjects (@code{rmail-summary-by-topic}). +@item C-M-s @var{regexp} +Summarize messages whose headers and the subject line match the +specified regular expression @var{regexp} +(@code{rmail-summary-by-regexp}). +@end table + +@kindex h @r{(Rmail)} +@findex rmail-summary + The @kbd{h} or @kbd{C-M-h} (@code{rmail-summary}) command fills the summary buffer +for the current Rmail file with a summary of all the messages in the file. +It then displays and selects the summary buffer in another window. + +@kindex l @r{(Rmail)} +@kindex C-M-l @r{(Rmail)} +@findex rmail-summary-by-labels + @kbd{C-M-l @var{labels} @key{RET}} (@code{rmail-summary-by-labels}) makes +a partial summary mentioning only the messages that have one or more of the +labels @var{labels}. @var{labels} should contain label names separated by +commas. + +@kindex C-M-r @r{(Rmail)} +@findex rmail-summary-by-recipients + @kbd{C-M-r @var{rcpts} @key{RET}} (@code{rmail-summary-by-recipients}) +makes a partial summary mentioning only the messages that have one or more +of the recipients @var{rcpts}. @var{rcpts} should contain mailing +addresses separated by commas. + +@kindex C-M-t @r{(Rmail)} +@findex rmail-summary-by-topic + @kbd{C-M-t @var{topic} @key{RET}} (@code{rmail-summary-by-topic}) +makes a partial summary mentioning only the messages whose subjects have +a match for the regular expression @var{topic}. + +@kindex C-M-s @r{(Rmail)} +@findex rmail-summary-by-regexp + @kbd{C-M-s @var{regexp} @key{RET}} (@code{rmail-summary-by-regexp}) +makes a partial summary which mentions only the messages whose headers +(including the date and the subject lines) match the regular +expression @var{regexp}. + + Note that there is only one summary buffer for any Rmail file; +making any kind of summary discards any previous summary. + +@vindex rmail-summary-window-size +@vindex rmail-summary-line-count-flag + The variable @code{rmail-summary-window-size} says how many lines to +use for the summary window. The variable +@code{rmail-summary-line-count-flag} controls whether the summary line +for a message should include the line count of the message. + +@node Rmail Summary Edit +@subsection Editing in Summaries + + You can use the Rmail summary buffer to do almost anything you can do +in the Rmail buffer itself. In fact, once you have a summary buffer, +there's no need to switch back to the Rmail buffer. + + You can select and display various messages in the Rmail buffer, from +the summary buffer, just by moving point in the summary buffer to +different lines. It doesn't matter what Emacs command you use to move +point; whichever line point is on at the end of the command, that +message is selected in the Rmail buffer. + + Almost all Rmail commands work in the summary buffer as well as in the +Rmail buffer. Thus, @kbd{d} in the summary buffer deletes the current +message, @kbd{u} undeletes, and @kbd{x} expunges. (However, in the +summary buffer, a numeric argument to @kbd{d}, @kbd{C-d} and @kbd{u} +serves as a repeat count. A negative argument reverses the meaning of +@kbd{d} and @kbd{C-d}.) @kbd{o} and @kbd{C-o} output the current +message to a file; @kbd{r} starts a reply to it. You can scroll the +current message while remaining in the summary buffer using @key{SPC} +and @key{DEL}. + + The Rmail commands to move between messages also work in the summary +buffer, but with a twist: they move through the set of messages included +in the summary. They also ensure the Rmail buffer appears on the screen +(unlike cursor motion commands, which update the contents of the Rmail +buffer but don't display it in a window unless it already appears). +Here is a list of these commands: + +@table @kbd +@item n +Move to next line, skipping lines saying `deleted', and select its +message. +@item p +Move to previous line, skipping lines saying `deleted', and select +its message. +@item M-n +Move to next line and select its message. +@item M-p +Move to previous line and select its message. +@item > +Move to the last line, and select its message. +@item < +Move to the first line, and select its message. +@item j +@itemx @key{RET} +Select the message on the current line (ensuring that the RMAIL buffer +appears on the screen). With argument @var{n}, select message number +@var{n} and move to its line in the summary buffer; this signals an +error if the message is not listed in the summary buffer. +@item M-s @var{pattern} @key{RET} +Search through messages for @var{pattern} starting with the current +message; select the message found, and move point in the summary buffer +to that message's line. +@end table + +@vindex rmail-redisplay-summary + Deletion, undeletion, and getting new mail, and even selection of a +different message all update the summary buffer when you do them in the +Rmail buffer. If the variable @code{rmail-redisplay-summary} is +non-@code{nil}, these actions also bring the summary buffer back onto +the screen. + +@kindex Q @r{(Rmail summary)} +@findex rmail-summary-wipe +@kindex q @r{(Rmail summary)} +@findex rmail-summary-quit + When you are finished using the summary, type @kbd{Q} +(@code{rmail-summary-wipe}) to delete the summary buffer's window. You +can also exit Rmail while in the summary: @kbd{q} +(@code{rmail-summary-quit}) deletes the summary window, then exits from +Rmail by saving the Rmail file and switching to another buffer. + +@node Rmail Sorting +@section Sorting the Rmail File + +@table @kbd +@item M-x rmail-sort-by-date +Sort messages of current Rmail file by date. + +@item M-x rmail-sort-by-subject +Sort messages of current Rmail file by subject. + +@item M-x rmail-sort-by-author +Sort messages of current Rmail file by author's name. + +@item M-x rmail-sort-by-recipient +Sort messages of current Rmail file by recipient's names. + +@item M-x rmail-sort-by-correspondent +Sort messages of current Rmail file by the name of the other +correspondent. + +@item M-x rmail-sort-by-lines +Sort messages of current Rmail file by size (number of lines). + +@item M-x rmail-sort-by-keywords @key{RET} @var{labels} @key{RET} +Sort messages of current Rmail file by labels. The argument +@var{labels} should be a comma-separated list of labels. The order of +these labels specifies the order of messages; messages with the first +label come first, messages with the second label come second, and so on. +Messages which have none of these labels come last. +@end table + + The Rmail sort commands perform a @emph{stable sort}: if there is no +reason to prefer either one of two messages, their order remains +unchanged. You can use this to sort by more than one criterion. For +example, if you use @code{rmail-sort-by-date} and then +@code{rmail-sort-by-author}, messages from the same author appear in +order by date. + + With a numeric argument, all these commands reverse the order of +comparison. This means they sort messages from newest to oldest, from +biggest to smallest, or in reverse alphabetical order. + +@node Rmail Display +@section Display of Messages + + Rmail reformats the header of each message before displaying it for +the first time. Reformatting hides uninteresting header fields to +reduce clutter. You can use the @kbd{t} command to show the entire +header or to repeat the header reformatting operation. + +@table @kbd +@item t +Toggle display of complete header (@code{rmail-toggle-header}). +@end table + +@vindex rmail-ignored-headers +@vindex rmail-nonignored-headers + Reformatting the header involves deleting most header fields, on the +grounds that they are not interesting. The variable +@code{rmail-ignored-headers} holds a regular expression that specifies +which header fields to hide in this way---if it matches the beginning +of a header field, that whole field is hidden. However, the variable +@code{rmail-nonignored-headers} provides a further override: a header +matching that regular expression is shown even if it matches +@code{rmail-ignored-headers} too. + +@kindex t @r{(Rmail)} +@findex rmail-toggle-header + Rmail saves the complete original header before reformatting; to see +it, use the @kbd{t} command (@code{rmail-toggle-header}). This +discards the reformatted headers of the current message and displays +it with the original header. Repeating @kbd{t} reformats the message +again, which shows only the interesting headers according to the +current values of those variable. Selecting the message again also +reformats it if necessary. + + One consequence of this is that if you edit the reformatted header +(using @kbd{e}; @pxref{Rmail Editing}), subsequent use of @kbd{t} will +discard your edits. On the other hand, if you use @kbd{e} after +@kbd{t}, to edit the original (unreformatted) header, those changes are +permanent. + + When the @kbd{t} command has a prefix argument, a positive argument +means to show the reformatted header, and a zero or negative argument +means to show the full header. + +@vindex rmail-highlighted-headers + When the terminal supports multiple fonts or colors, Rmail +highlights certain header fields that are especially interesting---by +default, the @samp{From} and @samp{Subject} fields. The variable +@code{rmail-highlighted-headers} holds a regular expression that +specifies the header fields to highlight; if it matches the beginning +of a header field, that whole field is highlighted. + + If you specify unusual colors for your text foreground and +background, the colors used for highlighting may not go well with +them. If so, specify different colors by setting the variable +@code{rmail-highlight-face} to a suitable face. To turn off +highlighting entirely in Rmail, set @code{rmail-highlighted-headers} +to @code{nil}. + + You can highlight and activate URLs in incoming messages by adding +the function @code{goto-address} to the hook +@code{rmail-show-message-hook}. Then you can browse these URLs by +clicking on them with @kbd{Mouse-2} (or @kbd{Mouse-1} quickly) or by +moving to one and typing @kbd{C-c @key{RET}}. @xref{Goto-address, +Activating URLs, Activating URLs}. + +@node Rmail Coding +@section Rmail and Coding Systems + +@cindex decoding mail messages (Rmail) + Rmail automatically decodes messages which contain non-@acronym{ASCII} +characters, just as Emacs does with files you visit and with subprocess +output. Rmail uses the standard @samp{charset=@var{charset}} header in +the message, if any, to determine how the message was encoded by the +sender. It maps @var{charset} into the corresponding Emacs coding +system (@pxref{Coding Systems}), and uses that coding system to decode +message text. If the message header doesn't have the @samp{charset} +specification, or if @var{charset} is not recognized, +Rmail chooses the coding system with the usual Emacs heuristics and +defaults (@pxref{Recognize Coding}). + +@cindex fixing incorrectly decoded mail messages + Occasionally, a message is decoded incorrectly, either because Emacs +guessed the wrong coding system in the absence of the @samp{charset} +specification, or because the specification was inaccurate. For +example, a misconfigured mailer could send a message with a +@samp{charset=iso-8859-1} header when the message is actually encoded +in @code{koi8-r}. When you see the message text garbled, or some of +its characters displayed as empty boxes, this may have happened. + +@findex rmail-redecode-body + You can correct the problem by decoding the message again using the +right coding system, if you can figure out or guess which one is +right. To do this, invoke the @kbd{M-x rmail-redecode-body} command. +It reads the name of a coding system, encodes the message body using +whichever coding system was used to decode it before, then redecodes +it using the coding system you specified. If you specified the right +coding system, the result should be readable. + + Decoding and encoding using the wrong coding system is lossless for +most encodings, in particular with 8-bit encodings such as iso-8859 or +koi8. So, if the initial attempt to redecode the message didn't +result in a legible text, you can try other coding systems until you +succeed. + + With some coding systems, notably those from the iso-2022 family, +information can be lost in decoding, so that encoding the message +again won't bring back the original incoming text. In such a case, +@code{rmail-redecode-body} cannot work. However, the problems that +call for use of @code{rmail-redecode-body} rarely occur with those +coding systems. So in practice the command works when you need it. + +@node Rmail Editing +@section Editing Within a Message + + Most of the usual Emacs commands are available in Rmail mode, though a +few, such as @kbd{C-M-n} and @kbd{C-M-h}, are redefined by Rmail for +other purposes. However, the Rmail buffer is normally read only, and +most of the letters are redefined as Rmail commands. If you want to +edit the text of a message, you must use the Rmail command @kbd{e}. + +@table @kbd +@item e +Edit the current message as ordinary text. +@end table + +@kindex e @r{(Rmail)} +@findex rmail-edit-current-message + The @kbd{e} command (@code{rmail-edit-current-message}) switches from +Rmail mode into Rmail Edit mode, another major mode which is nearly the +same as Text mode. The mode line indicates this change. + + In Rmail Edit mode, letters insert themselves as usual and the Rmail +commands are not available. When you are finished editing the message and +are ready to go back to Rmail, type @kbd{C-c C-c}, which switches back to +Rmail mode. Alternatively, you can return to Rmail mode but cancel all the +editing that you have done, by typing @kbd{C-c C-]}. + +@vindex rmail-edit-mode-hook + Entering Rmail Edit mode runs the hook @code{text-mode-hook}; then it +runs the hook @code{rmail-edit-mode-hook} (@pxref{Hooks}). It adds the +attribute @samp{edited} to the message. It also displays the full +headers of the message, so that you can edit the headers as well as the +body of the message, and your changes in the headers will be +permanent. + +@node Rmail Digest +@section Digest Messages +@cindex digest message +@cindex undigestify + + A @dfn{digest message} is a message which exists to contain and carry +several other messages. Digests are used on some moderated mailing +lists; all the messages that arrive for the list during a period of time +such as one day are put inside a single digest which is then sent to the +subscribers. Transmitting the single digest uses much less computer +time than transmitting the individual messages even though the total +size is the same, because the per-message overhead in network mail +transmission is considerable. + +@findex undigestify-rmail-message + When you receive a digest message, the most convenient way to read it is +to @dfn{undigestify} it: to turn it back into many individual messages. +Then you can read and delete the individual messages as it suits you. +To do this, select the digest message and type the command @kbd{M-x +undigestify-rmail-message}. This extracts the submessages as separate +Rmail messages, and inserts them following the digest. The digest +message itself is flagged as deleted. + +@node Out of Rmail +@section Converting an Rmail File to Inbox Format +@cindex Babyl format to Inbox format +@cindex converting Rmail file to mailbox format + +@findex unrmail + The command @kbd{M-x unrmail} converts a file in Rmail format to inbox +format (also known as the system mailbox, or mbox, format), so that +you can use it with other mail-editing tools. You must specify two +arguments, the name of the Rmail file and the name to use for the +converted file. @kbd{M-x unrmail} does not alter the Rmail file itself. + +@pindex b2m + @kbd{M-x unrmail} is useful if you can run Emacs on the machine +where the Rmail file resides, or can access the Rmail file remotely +(@pxref{Remote Files}) from a machine where Emacs is installed. If +accessing Rmail files from Emacs is impossible, you can use the +@command{b2m} program instead. @command{b2m} is part of the Emacs +distribution, it is installed into the same directory where all the +other auxiliary programs (@command{etags} etc.) are installed, and its +source is available in the Emacs source distribution, so that you +could copy the source to the target machine and compile it there. + + To convert a file @file{@var{babyl-file}} into @file{@var{mbox-file}}, +invoke @command{b2m} like this: + +@example + b2m < @var{babyl-file} > @var{mbox-file} +@end example + +@node Rmail Rot13 +@section Reading Rot13 Messages +@cindex rot13 code + + Mailing list messages that might offend some readers are sometimes +encoded in a simple code called @dfn{rot13}---so named because it +rotates the alphabet by 13 letters. This code is not for secrecy, as it +provides none; rather, it enables those who might be offended to avoid +seeing the real text of the message. + +@findex rot13-other-window + To view a buffer which uses the rot13 code, use the command @kbd{M-x +rot13-other-window}. This displays the current buffer in another window +which applies the code when displaying the text. + +@node Movemail +@section @code{movemail} program +@cindex @code{movemail} program + + When invoked for the first time, Rmail attempts to locate the +@code{movemail} program and determine its version. There are two +versions of @code{movemail} program: the native one, shipped with GNU +Emacs (the ``emacs version'') and the one included in GNU mailutils +(the ``mailutils version,'' @pxref{movemail,,,mailutils,GNU +mailutils}). They support the same command line syntax and the same +basic subset of options. However, the Mailutils version offers +additional features. + + The Emacs version of @code{movemail} is able to retrieve mail from +usual UNIX mailbox formats and from remote mailboxes using the POP3 +protocol. + + The Mailutils version is able to handle a wide set of mailbox +formats, such as plain UNIX mailboxes, @code{maildir} and @code{MH} +mailboxes, etc. It is able to retrieve remote mail using POP3 or +IMAP4 protocol, and can retrieve mail from them using a TLS encrypted +channel. It also accepts mailbox argument in the @acronym{URL} form. +The detailed description of mailbox @acronym{URL}s can be found in +@ref{URL,,,mailutils,Mailbox URL Formats}. In short, a @acronym{URL} +is: + +@smallexample +@var{proto}://[@var{user}[:@var{password}]@@]@var{host-or-file-name} +@end smallexample + +@noindent +where square brackets denote optional elements. + +@table @var +@item proto +Specifies the @dfn{mailbox protocol}, or @dfn{format} to +use. The exact semantics of the rest of @acronym{URL} elements depends +on the actual value of @var{proto} (see below). + +@item user +User name to access the remote mailbox. + +@item password +User password to access the remote mailbox. + +@item host-or-file-name +Hostname of the remote server for remote mailboxes or file name of a +local mailbox. +@end table + +@noindent +@var{Proto} can be one of: + +@table @code +@item mbox +Usual UNIX mailbox format. In this case, neither @var{user} nor +@var{pass} are used, and @var{host-or-file-name} denotes the file name of +the mailbox file, e.g., @code{mbox://var/spool/mail/smith}. + +@item mh +A local mailbox in the @acronym{MH} format. @var{User} and +@var{pass} are not used. @var{Host-or-file-name} denotes the name of +@acronym{MH} folder, e.g., @code{mh://Mail/inbox}. + +@item maildir +A local mailbox in the @acronym{maildir} format. @var{User} and +@var{pass} are not used, and @var{host-or-file-name} denotes the name of +@code{maildir} mailbox, e.g., @code{maildir://mail/inbox}. + +@item file +Any local mailbox format. Its actual format is detected automatically +by @code{movemail}. + +@item pop +A remote mailbox to be accessed via POP3 protocol. @var{User} +specifies the remote user name to use, @var{pass} may be used to +specify the user password, @var{host-or-file-name} is the name or IP +address of the remote mail server to connect to; e.g., +@code{pop://smith:guessme@@remote.server.net}. + +@item imap +A remote mailbox to be accessed via IMAP4 protocol. @var{User} +specifies the remote user name to use, @var{pass} may be used to +specify the user password, @var{host-or-file-name} is the name or IP +address of the remote mail server to connect to; +e.g., @code{imap://smith:guessme@@remote.server.net}. +@end table + + Alternatively, you can specify the file name of the mailbox to use. +This is equivalent to specifying the @samp{file} protocol: + +@smallexample +/var/spool/mail/@var{user} @equiv{} file://var/spool/mail/@var{user} +@end smallexample + +@vindex rmail-movemail-program +@vindex rmail-movemail-search-path + The variable @code{rmail-movemail-program} controls which version of +@code{movemail} to use. If that is a string, it specifies the +absolute file name of the @code{movemail} executable. If it is +@code{nil}, Rmail searches for @code{movemail} in the directories +listed in @code{rmail-movemail-search-path} and @code{exec-path}, then +in @code{exec-directory}. + +@node Remote Mailboxes +@section Retrieving Mail from Remote Mailboxes +@pindex movemail + + Some sites use a method called POP for accessing users' inbox data +instead of storing the data in inbox files. The @code{Emacs +movemail} can work with POP if you compile it with the macro +@code{MAIL_USE_POP} defined. (You can achieve that by specifying +@samp{--with-pop} when you run @code{configure} during the +installation of Emacs.) + +The Mailutils @code{movemail} by default supports POP, unless it was +configured with @samp{--disable-pop} option. + +Both versions of @code{movemail} only work with POP3, not with older +versions of POP. + +@cindex @env{MAILHOST} environment variable +@cindex POP mailboxes + No matter which flavor of @code{movemail} you use, you can specify +POP inbox by using POP @dfn{URL} (@pxref{Movemail}). A POP +@acronym{URL} is a ``file name'' of the form +@samp{pop://@var{username}@@@var{hostname}}, where +@var{hostname} is the host name or IP address of the remote mail +server and @var{username} is the user name on that server. +Additionally, you may specify the password in the mailbox @acronym{URL}: +@samp{pop://@var{username}:@var{password}@@@var{hostname}}. In this +case, @var{password} takes preference over the one set by +@code{rmail-remote-password}. This is especially useful if you have +several remote mailboxes with different passwords. + + For backward compatibility, Rmail also supports two alternative ways +of specifying remote POP mailboxes. First, specifying an inbox name +in the form @samp{po:@var{username}:@var{hostname}} is equivalent to +@samp{pop://@var{username}@@@var{hostname}}. Alternatively, you may +set a ``file name'' of @samp{po:@var{username}} in the inbox list of +an Rmail file. @code{movemail} will handle such a name by opening a +connection to the POP server. In this case, the @env{MAILHOST} +environment variable specifies the machine on which to look for the +POP server. + +@cindex IMAP mailboxes + Another method for accessing remote mailboxes is IMAP. This method is +supported only by the Mailutils @code{movemail}. To specify an IMAP +mailbox in the inbox list, use the following mailbox @acronym{URL}: +@samp{imap://@var{username}[:@var{password}]@@@var{hostname}}. The +@var{password} part is optional, as described above. + +@vindex rmail-remote-password +@vindex rmail-remote-password-required +@vindex rmail-pop-password +@vindex rmail-pop-password-required + Accessing a remote mailbox may require a password. Rmail uses the +following algorithm to retrieve it: + +@enumerate +@item +If the @var{password} is present in mailbox URL (see above), it is +used. +@item +If the variable @code{rmail-remote-password} is non-@code{nil}, its +value is used. +@item +Otherwise, if @code{rmail-remote-password-required} is non-@code{nil}, +then Rmail will ask you for the password to use. +@item +Otherwise, Rmail assumes no password is required. +@end enumerate + + For compatibility with previous versions, the variables +@code{rmail-pop-password} and @code{rmail-pop-password-required} may +be used instead of @code{rmail-remote-password} and +@code{rmail-remote-password-required}. + +@vindex rmail-movemail-flags + If you need to pass additional command-line flags to @code{movemail}, +set the variable @code{rmail-movemail-flags} a list of the flags you +wish to use. Do not use this variable to pass the @samp{-p} flag to +preserve your inbox contents; use @code{rmail-preserve-inbox} instead. + +@cindex Kerberos POP authentication + The @code{movemail} program installed at your site may support +Kerberos authentication. If it is +supported, it is used by default whenever you attempt to retrieve +POP mail when @code{rmail-pop-password} and +@code{rmail-pop-password-required} are unset. + +@cindex reverse order in POP inboxes + Some POP servers store messages in reverse order. If your server does +this, and you would rather read your mail in the order in which it was +received, you can tell @code{movemail} to reverse the order of +downloaded messages by adding the @samp{-r} flag to +@code{rmail-movemail-flags}. + +@cindex TLS encryption (Rmail) + Mailutils @code{movemail} supports TLS encryption. If you wish to +use it, add the @samp{--tls} flag to @code{rmail-movemail-flags}. + +@node Other Mailbox Formats +@section Retrieving Mail from Local Mailboxes in Various Formats + + If your incoming mail is stored on a local machine in a format other +than UNIX mailbox, you will need the Mailutils @code{movemail} to +retrieve it. @xref{Movemail}, for the detailed description of +@code{movemail} versions. For example, to access mail from a inbox in +@code{maildir} format located in @file{/var/spool/mail/in}, you would +include the following in the Rmail inbox list: + +@smallexample +maildir://var/spool/mail/in +@end smallexample + +@ignore + arch-tag: 034965f6-38df-47a2-a9f1-b8bc8ab37e23 +@end ignore diff --git a/doc/emacs/screen.texi b/doc/emacs/screen.texi new file mode 100644 index 00000000000..90ec645a26f --- /dev/null +++ b/doc/emacs/screen.texi @@ -0,0 +1,359 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2001, 2002, +@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Screen, User Input, Acknowledgments, Top +@chapter The Organization of the Screen +@cindex screen +@cindex parts of the screen + + On a text-only terminal, the Emacs display occupies the whole +screen. On a graphical display, such as on GNU/Linux using the X +Window System, Emacs creates its own windows to use. We use the term +@dfn{frame} to mean the entire text-only screen or an entire +system-level window used by Emacs. Emacs uses both kinds of frames, +in the same way, to display your editing. Emacs normally starts out +with just one frame, but you can create additional frames if you wish. +@xref{Frames}. + + When you start Emacs, the main central area of the frame, all except +for the top and bottom and sides, displays the text you are editing. +This area is called @dfn{the window}. At the top there is normally a +@dfn{menu bar} where you can access a series of menus; then there may +be a @dfn{tool bar}, a row of icons that perform editing commands if +you click on them. Below this, the window begins, often with a +@dfn{scroll bar} on one side. Below the window comes the last line of +the frame, a special @dfn{echo area} or @dfn{minibuffer window}, where +prompts appear and you enter information when Emacs asks for it. See +following sections for more information about these special lines. + + You can subdivide the window horizontally or vertically to make +multiple text windows, each of which can independently display some +file or text (@pxref{Windows}). In this manual, the word ``window'' +refers to the initial large window if not subdivided, or any one of +the multiple windows you have subdivided it into. + + At any time, one window is the @dfn{selected window}. On graphical +displays, the selected window normally shows a more prominent cursor +(usually solid and blinking) while other windows show a weaker cursor +(such as a hollow box). Text terminals have just one cursor, so it +always appears in the selected window. + + Most Emacs commands implicitly apply to the text in the selected +window; the text in unselected windows is mostly visible for +reference. However, mouse commands generally operate on whatever +window you click them in, whether selected or not. If you use +multiple frames on a graphical display, then giving the input focus to +a particular frame selects a window in that frame. + + Each window's last line is a @dfn{mode line}, which describes what +is going on in that window. It appears in different color and/or a ``3D'' +box if the terminal supports them; its contents normally begin with +@w{@samp{--:-- @ *scratch*}} when Emacs starts. The mode line +displays status information such as what buffer is being displayed +above it in the window, what major and minor modes are in use, and +whether the buffer contains unsaved changes. + +@menu +* Point:: The place in the text where editing commands operate. +* Echo Area:: Short messages appear at the bottom of the screen. +* Mode Line:: Interpreting the mode line. +* Menu Bar:: How to use the menu bar. +@end menu + +@node Point +@section Point +@cindex point +@cindex cursor + + Within Emacs, the active cursor shows the location at which +editing commands will take effect. This location is called @dfn{point}. +Many Emacs commands move point through the text, so that you can edit at +different places in it. You can also place point by clicking mouse +button 1 (normally the left button). + + While the cursor appears to be @emph{on} a character, you should +think of point as @emph{between} two characters; it points @emph{before} +the character that appears under the cursor. For example, if your text +looks like @samp{frob} with the cursor over the @samp{b}, then point is +between the @samp{o} and the @samp{b}. If you insert the character +@samp{!} at that position, the result is @samp{fro!b}, with point +between the @samp{!} and the @samp{b}. Thus, the cursor remains over +the @samp{b}, as before. + + Sometimes people speak of ``the cursor'' when they mean ``point,'' or +speak of commands that move point as ``cursor motion'' commands. + + If you are editing several files in Emacs, each in its own buffer, +each buffer has its own point location. A buffer that is not +currently displayed remembers its point location in case you display +it again later. When Emacs displays multiple windows, each window has +its own point location. If the same buffer appears in more than one +window, each window has its own point position in that buffer, and (when +possible) its own cursor. + + A text-only terminal has just one cursor, in the selected window. +The other windows do not show a cursor, even though they do have their +own position of point. When Emacs updates the screen on a text-only +terminal, it has to put the cursor temporarily at the place the output +goes. This doesn't mean point is there, though. Once display +updating finishes, Emacs puts the cursor where point is. + + On graphical displays, Emacs shows a cursor in each window; the +selected window's cursor is solid and blinking, and the other cursors +are just hollow. Thus, the most prominent cursor always shows you the +selected window, on all kinds of terminals. + + @xref{Cursor Display}, for customizable variables that control display +of the cursor or cursors. + + The term ``point'' comes from the character @samp{.}, which was the +command in TECO (the language in which the original Emacs was written) +for accessing the value now called ``point.'' + +@node Echo Area +@section The Echo Area +@cindex echo area + + The line at the bottom of the frame (below the mode line) is the +@dfn{echo area}. It is used to display small amounts of text for +various purposes. + + @dfn{Echoing} means displaying the characters that you type. At the +command line, the operating system normally echoes all your input. +Emacs handles echoing differently. + + Single-character commands do not echo in Emacs, and multi-character +commands echo only if you pause while typing them. As soon as you pause +for more than a second in the middle of a command, Emacs echoes all the +characters of the command so far. This is to @dfn{prompt} you for the +rest of the command. Once echoing has started, the rest of the command +echoes immediately as you type it. This behavior is designed to give +confident users fast response, while giving hesitant users maximum +feedback. You can change this behavior by setting a variable +(@pxref{Display Custom}). + +@cindex error message in the echo area + If a command cannot do its job, it may display an @dfn{error +message} in the echo area. Error messages are accompanied by beeping +or by flashing the screen. The error also discards any input you have +typed ahead. + + Some commands display informative messages in the echo area. These +messages look much like error messages, but they are not announced +with a beep and do not throw away input. Sometimes the message tells +you what the command has done, when this is not obvious from looking +at the text being edited. Sometimes the sole purpose of a command is +to show you a message giving you specific information---for example, +@kbd{C-x =} (hold down @key{CTRL} and type @kbd{x}, then let go of +@key{CTRL} and type @kbd{=}) displays a message describing the +character position of point in the text and its current column in the +window. Commands that take a long time often display messages ending +in @samp{...} while they are working, and add @samp{done} at the end +when they are finished. They may also indicate progress with +percentages. + +@cindex @samp{*Messages*} buffer +@cindex saved echo area messages +@cindex messages saved from echo area + Echo-area informative messages are saved in an editor buffer named +@samp{*Messages*}. (We have not explained buffers yet; see +@ref{Buffers}, for more information about them.) If you miss a message +that appears briefly on the screen, you can switch to the +@samp{*Messages*} buffer to see it again. (Successive progress messages +are often collapsed into one in that buffer.) + +@vindex message-log-max + The size of @samp{*Messages*} is limited to a certain number of +lines. The variable @code{message-log-max} specifies how many lines. +Once the buffer has that many lines, adding lines at the end deletes lines +from the beginning, to keep the size constant. @xref{Variables}, for +how to set variables such as @code{message-log-max}. + + The echo area is also used to display the @dfn{minibuffer}, a window +where you can input arguments to commands, such as the name of a file +to be edited. When the minibuffer is in use, the echo area begins +with a prompt string that usually ends with a colon; also, the cursor +appears in that line because it is the selected window. You can +always get out of the minibuffer by typing @kbd{C-g}. +@xref{Minibuffer}. + +@node Mode Line +@section The Mode Line +@cindex mode line +@cindex top level +@c + + Each text window's last line is a @dfn{mode line}, which describes +what is going on in that window. The mode line starts and ends with +dashes. When there is only one text window, the mode line appears +right above the echo area; it is the next-to-last line in the frame. +On a text-only terminal, the mode line is in inverse video if the +terminal supports that; on a graphics display, the mode line has a 3D +box appearance to help it stand out. The mode line of the selected +window is highlighted if possible; see @ref{Optional Mode Line}, for +more information. + + Normally, the mode line looks like this: + +@example +-@var{cs}:@var{ch}@var{R}-@var{fr} @var{buf} @var{pos} @var{line} (@var{major} @var{minor})------ +@end example + +@noindent +This gives information about the window and the buffer it displays: the +buffer's name, what major and minor modes are in use, whether the +buffer's text has been changed, and how far down the buffer you are +currently looking. + + @var{ch} contains two stars @samp{**} if the text in the buffer has +been edited (the buffer is ``modified''), or @samp{--} if the buffer has +not been edited. For a read-only buffer, it is @samp{%*} if the buffer +is modified, and @samp{%%} otherwise. + + @var{R} is @samp{@@} if the default-directory for the current buffer +is on a remote machine, or a hyphen otherwise. + + @var{fr} gives the selected frame name (@pxref{Frames}). It appears +only on text-only terminals. The initial frame's name is @samp{F1}. + + @var{buf} is the name of the window's @dfn{buffer}. Usually this is +the same as the name of a file you are editing. @xref{Buffers}. + + The buffer displayed in the selected window (the window with the +cursor) is the @dfn{current buffer}, where editing happens. When a +command's effect applies to ``the buffer,'' we mean it does those +things to the current buffer. + + @var{pos} tells you whether there is additional text above the top of +the window, or below the bottom. If your buffer is small and it is all +visible in the window, @var{pos} is @samp{All}. Otherwise, it is +@samp{Top} if you are looking at the beginning of the buffer, @samp{Bot} +if you are looking at the end of the buffer, or @samp{@var{nn}%}, where +@var{nn} is the percentage of the buffer above the top of the window. +With Size Indication mode, you can display the size of the buffer as +well. @xref{Optional Mode Line}. + + @var{line} is @samp{L} followed by the current line number of point. +This is present when Line Number mode is enabled (it normally is). +You can display the current column number too, by turning on Column +Number mode. It is not enabled by default because it is somewhat +slower. @xref{Optional Mode Line}. + + @var{major} is the name of the @dfn{major mode} in effect in the +buffer. A buffer can only be in one major mode at a time. The major +modes available include Fundamental mode (the least specialized), Text +mode, Lisp mode, C mode, Texinfo mode, and many others. @xref{Major +Modes}, for details of how the modes differ and how to select +them. + + Some major modes display additional information after the major mode +name. For example, Rmail buffers display the current message number and +the total number of messages. Compilation buffers and Shell buffers +display the status of the subprocess. + + @var{minor} is a list of some of the @dfn{minor modes} that are +turned on at the moment in the window's chosen buffer. For example, +@samp{Fill} means that Auto Fill mode is on. @samp{Abbrev} means that +Word Abbrev mode is on. @samp{Ovwrt} means that Overwrite mode is on. +@xref{Minor Modes}, for more information. + + @samp{Narrow} means that the buffer being displayed has editing +restricted to only a portion of its text. (This is not really a minor +mode, but is like one.) @xref{Narrowing}. @samp{Def} means that a +keyboard macro is being defined. @xref{Keyboard Macros}. + + In addition, if Emacs is inside a recursive editing level, square +brackets (@samp{[@dots{}]}) appear around the parentheses that +surround the modes. If Emacs is in one recursive editing level within +another, double square brackets appear, and so on. Since recursive +editing levels affect Emacs globally, not just one buffer, the square +brackets appear in every window's mode line or not in any of them. +@xref{Recursive Edit}.@refill + + @var{cs} states the coding system used for the file you are editing. +A dash indicates the default state of affairs: no code conversion, +except for end-of-line translation if the file contents call for that. +@samp{=} means no conversion whatsoever. Nontrivial code conversions +are represented by various letters---for example, @samp{1} refers to ISO +Latin-1. @xref{Coding Systems}, for more information. + + On a text-only terminal, @var{cs} includes two additional characters +which describe the coding system for keyboard input and the coding +system for terminal output. They come right before the coding system +used for the file you are editing. + + If you are using an input method, a string of the form +@samp{@var{i}>} is added to the beginning of @var{cs}; @var{i} +identifies the input method. (Some input methods show @samp{+} or +@samp{@@} instead of @samp{>}.) @xref{Input Methods}. + + When multibyte characters are not enabled, @var{cs} does not appear at +all. @xref{Enabling Multibyte}. + +@cindex end-of-line conversion, mode-line indication + The colon after @var{cs} changes to another string in some cases. +Emacs uses newline characters to separate lines in the buffer. Some +files use different conventions for separating lines: either +carriage-return linefeed (the MS-DOS convention) or just +carriage-return (the Macintosh convention). If the buffer's file uses +carriage-return linefeed, the colon changes to either a backslash +(@samp{\}) or @samp{(DOS)}, depending on the operating system. If the +file uses just carriage-return, the colon indicator changes to either +a forward slash (@samp{/}) or @samp{(Mac)}. On some systems, Emacs +displays @samp{(Unix)} instead of the colon for files that use newline +as the line separator. + + @xref{Optional Mode Line}, to add other handy information to the +mode line, such as the size of the buffer, the current column number +of point, and whether new mail for you has arrived. + + The mode line is mouse-sensitive; when you move the mouse across +various parts of it, Emacs displays help text to say what a click in +that place will do. @xref{Mode Line Mouse}. + +@node Menu Bar +@section The Menu Bar +@cindex menu bar + + Each Emacs frame normally has a @dfn{menu bar} at the top which you +can use to perform common operations. There's no need to list them +here, as you can more easily see them yourself. + +@kindex M-` +@kindex F10 +@findex tmm-menubar +@findex menu-bar-open + On a graphical display, you can use the mouse to choose a command +from the menu bar. A right-arrow at the end of the menu item means it +leads to a subsidiary menu; @samp{...} at the end means that the +command invoked will read arguments (further input from you) before it +actually does anything. + + You can also invoke the first menu bar item by pressing @key{F10} (to run +the command @code{menu-bar-open}). You can then navigate the menus with +the arrow keys. You select an item by pressing @key{RET} and cancel menu +navigation with @key{ESC}. + + To view the full command name and documentation for a menu item, type +@kbd{C-h k}, and then select the menu bar with the mouse in the usual +way (@pxref{Key Help}). + + On text-only terminals with no mouse, you can use the menu bar by +typing @kbd{M-`} or @key{F10} (these run the command +@code{tmm-menubar}). This lets you select a menu item with the +keyboard. A provisional choice appears in the echo area. You can use +the up and down arrow keys to move through the menu to different +items, and then you can type @key{RET} to select the item. + + Each menu item also has an assigned letter or digit which designates +that item; it is usually the initial of some word in the item's name. +This letter or digit is separated from the item name by @samp{=>}. You +can type the item's letter or digit to select the item. + + Some of the commands in the menu bar have ordinary key bindings as +well; one such binding is shown in parentheses after the item itself. + +@ignore + arch-tag: 104ba40e-d972-4866-a542-a98be94bdf2f +@end ignore diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi new file mode 100644 index 00000000000..1a8a6372ba2 --- /dev/null +++ b/doc/emacs/search.texi @@ -0,0 +1,1361 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, 2002, +@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Search, Fixit, Display, Top +@chapter Searching and Replacement +@cindex searching +@cindex finding strings within text + + Like other editors, Emacs has commands for searching for occurrences of +a string. The principal search command is unusual in that it is +@dfn{incremental}; it begins to search before you have finished typing the +search string. There are also nonincremental search commands more like +those of other editors. + + Besides the usual @code{replace-string} command that finds all +occurrences of one string and replaces them with another, Emacs has a +more flexible replacement command called @code{query-replace}, which +asks interactively which occurrences to replace. There are also +commands to find and operate on all matches for a pattern. + + You can also search multiple files under control of a tags +table (@pxref{Tags Search}) or through the Dired @kbd{A} command +(@pxref{Operating on Files}), or ask the @code{grep} program to do it +(@pxref{Grep Searching}). + + +@menu +* Incremental Search:: Search happens as you type the string. +* Nonincremental Search:: Specify entire string and then search. +* Word Search:: Search for sequence of words. +* Regexp Search:: Search for match for a regexp. +* Regexps:: Syntax of regular expressions. +* Regexp Backslash:: Regular expression constructs starting with `\'. +* Regexp Example:: A complex regular expression explained. +* Search Case:: To ignore case while searching, or not. +* Replace:: Search, and replace some or all matches. +* Other Repeating Search:: Operating on all matches for some regexp. +@end menu + +@node Incremental Search +@section Incremental Search +@cindex incremental search +@cindex isearch + + An incremental search begins searching as soon as you type the first +character of the search string. As you type in the search string, Emacs +shows you where the string (as you have typed it so far) would be +found. When you have typed enough characters to identify the place you +want, you can stop. Depending on what you plan to do next, you may or +may not need to terminate the search explicitly with @key{RET}. + +@table @kbd +@item C-s +Incremental search forward (@code{isearch-forward}). +@item C-r +Incremental search backward (@code{isearch-backward}). +@end table + +@menu +* Basic Isearch:: Basic incremental search commands. +* Repeat Isearch:: Searching for the same string again. +* Error in Isearch:: When your string is not found. +* Special Isearch:: Special input in incremental search. +* Non-ASCII Isearch:: How to search for non-ASCII characters. +* Isearch Yank:: Commands that grab text into the search string + or else edit the search string. +* Highlight Isearch:: Isearch highlights the other possible matches. +* Isearch Scroll:: Scrolling during an incremental search. +* Slow Isearch:: Incremental search features for slow terminals. +@end menu + +@node Basic Isearch +@subsection Basics of Incremental Search + +@kindex C-s +@findex isearch-forward + @kbd{C-s} starts a forward incremental search. It reads characters +from the keyboard, and moves point past the next occurrence of those +characters. If you type @kbd{C-s} and then @kbd{F}, that puts the +cursor after the first @samp{F} (the first following the starting point, since +this is a forward search). Then if you type an @kbd{O}, you will see +the cursor move to just after the first @samp{FO} (the @samp{F} in that +@samp{FO} may or may not be the first @samp{F}). After another +@kbd{O}, the cursor moves to just after the first @samp{FOO} after the place +where you started the search. At each step, the buffer text that +matches the search string is highlighted, if the terminal can do that; +the current search string is always displayed in the echo area. + + If you make a mistake in typing the search string, you can cancel +characters with @key{DEL}. Each @key{DEL} cancels the last character of +search string. This does not happen until Emacs is ready to read another +input character; first it must either find, or fail to find, the character +you want to erase. If you do not want to wait for this to happen, use +@kbd{C-g} as described below. + + When you are satisfied with the place you have reached, you can type +@key{RET}, which stops searching, leaving the cursor where the search +brought it. Also, any command not specially meaningful in searches +stops the searching and is then executed. Thus, typing @kbd{C-a} +would exit the search and then move to the beginning of the line. +@key{RET} is necessary only if the next command you want to type is a +printing character, @key{DEL}, @key{RET}, or another character that is +special within searches (@kbd{C-q}, @kbd{C-w}, @kbd{C-r}, @kbd{C-s}, +@kbd{C-y}, @kbd{M-y}, @kbd{M-r}, @kbd{M-c}, @kbd{M-e}, and some other +meta-characters). + + When you exit the incremental search, it sets the mark where point +@emph{was} before the search. That is convenient for moving back +there. In Transient Mark mode, incremental search sets the mark +without activating it, and does so only if the mark is not already +active. + +@node Repeat Isearch +@subsection Repeating Incremental Search + + Sometimes you search for @samp{FOO} and find one, but not the one you +expected to find. There was a second @samp{FOO} that you forgot +about, before the one you were aiming for. In this event, type +another @kbd{C-s} to move to the next occurrence of the search string. +You can repeat this any number of times. If you overshoot, you can +cancel some @kbd{C-s} characters with @key{DEL}. + + After you exit a search, you can search for the same string again by +typing just @kbd{C-s C-s}: the first @kbd{C-s} is the key that invokes +incremental search, and the second @kbd{C-s} means ``search again.'' + + If a search is failing and you ask to repeat it by typing another +@kbd{C-s}, it starts again from the beginning of the buffer. +Repeating a failing reverse search with @kbd{C-r} starts again from +the end. This is called @dfn{wrapping around}, and @samp{Wrapped} +appears in the search prompt once this has happened. If you keep on +going past the original starting point of the search, it changes to +@samp{Overwrapped}, which means that you are revisiting matches that +you have already seen. + + To reuse earlier search strings, use the @dfn{search ring}. The +commands @kbd{M-p} and @kbd{M-n} move through the ring to pick a search +string to reuse. These commands leave the selected search ring element +in the minibuffer, where you can edit it. To edit the current search +string in the minibuffer without replacing it with items from the +search ring, type @kbd{M-e}. Type @kbd{C-s} or @kbd{C-r} +to terminate editing the string and search for it. + + You can change to searching backwards with @kbd{C-r}. For instance, +if you are searching forward but you realize you were looking for +something above the starting point, you can do this. Repeated +@kbd{C-r} keeps looking for more occurrences backwards. A @kbd{C-s} +starts going forwards again. @kbd{C-r} in a search can be canceled +with @key{DEL}. + +@kindex C-r +@findex isearch-backward + If you know initially that you want to search backwards, you can use +@kbd{C-r} instead of @kbd{C-s} to start the search, because @kbd{C-r} +as a key runs a command (@code{isearch-backward}) to search backward. +A backward search finds matches that end before the starting point, +just as a forward search finds matches that begin after it. + +@node Error in Isearch +@subsection Errors in Incremental Search + + If your string is not found at all, the echo area says @samp{Failing +I-Search}. The cursor is after the place where Emacs found as much of your +string as it could. Thus, if you search for @samp{FOOT}, and there is no +@samp{FOOT}, you might see the cursor after the @samp{FOO} in @samp{FOOL}. +At this point there are several things you can do. If your string was +mistyped, you can rub some of it out and correct it. If you like the place +you have found, you can type @key{RET} or some other Emacs command to +remain there. Or you can type @kbd{C-g}, which +removes from the search string the characters that could not be found (the +@samp{T} in @samp{FOOT}), leaving those that were found (the @samp{FOO} in +@samp{FOOT}). A second @kbd{C-g} at that point cancels the search +entirely, returning point to where it was when the search started. + +@cindex quitting (in search) + The @kbd{C-g} ``quit'' character does special things during searches; +just what it does depends on the status of the search. If the search has +found what you specified and is waiting for input, @kbd{C-g} cancels the +entire search. The cursor moves back to where you started the search. If +@kbd{C-g} is typed when there are characters in the search string that have +not been found---because Emacs is still searching for them, or because it +has failed to find them---then the search string characters which have not +been found are discarded from the search string. With them gone, the +search is now successful and waiting for more input, so a second @kbd{C-g} +will cancel the entire search. + +@node Special Isearch +@subsection Special Input for Incremental Search + + An upper-case letter in the search string makes the search +case-sensitive. If you delete the upper-case character from the search +string, it ceases to have this effect. @xref{Search Case}. + + To search for a newline, type @kbd{C-j}. To search for another +control character, such as control-S or carriage return, you must quote +it by typing @kbd{C-q} first. This function of @kbd{C-q} is analogous +to its use for insertion (@pxref{Inserting Text}): it causes the +following character to be treated the way any ``ordinary'' character is +treated in the same context. You can also specify a character by its +octal code: enter @kbd{C-q} followed by a sequence of octal digits. + + @kbd{M-%} typed in incremental search invokes @code{query-replace} +or @code{query-replace-regexp} (depending on search mode) with the +current search string used as the string to replace. @xref{Query +Replace}. + + Entering @key{RET} when the search string is empty launches +nonincremental search (@pxref{Nonincremental Search}). + +@vindex isearch-mode-map + To customize the special characters that incremental search understands, +alter their bindings in the keymap @code{isearch-mode-map}. For a list +of bindings, look at the documentation of @code{isearch-mode} with +@kbd{C-h f isearch-mode @key{RET}}. + +@node Non-ASCII Isearch +@subsection Isearch for Non-@acronym{ASCII} Characters +@cindex searching for non-@acronym{ASCII} characters +@cindex input method, during incremental search + + To enter non-@acronym{ASCII} characters in an incremental search, +you can use @kbd{C-q} (see the previous section), but it is easier to +use an input method (@pxref{Input Methods}). If an input method is +enabled in the current buffer when you start the search, you can use +it in the search string also. Emacs indicates that by including the +input method mnemonic in its prompt, like this: + +@example +I-search [@var{im}]: +@end example + +@noindent +@findex isearch-toggle-input-method +@findex isearch-toggle-specified-input-method +where @var{im} is the mnemonic of the active input method. + + You can toggle (enable or disable) the input method while you type +the search string with @kbd{C-\} (@code{isearch-toggle-input-method}). +You can turn on a certain (non-default) input method with @kbd{C-^} +(@code{isearch-toggle-specified-input-method}), which prompts for the +name of the input method. The input method you enable during +incremental search remains enabled in the current buffer afterwards. + +@node Isearch Yank +@subsection Isearch Yanking + + The characters @kbd{C-w} and @kbd{C-y} can be used in incremental +search to grab text from the buffer into the search string. This +makes it convenient to search for another occurrence of text at point. +@kbd{C-w} copies the character or word after point as part of the +search string, advancing point over it. (The decision, whether to +copy a character or a word, is heuristic.) Another @kbd{C-s} to +repeat the search will then search for a string including that +character or word. + + @kbd{C-y} is similar to @kbd{C-w} but copies all the rest of the +current line into the search string. If point is already at the end +of a line, it grabs the entire next line. Both @kbd{C-y} and +@kbd{C-w} convert the text they copy to lower case if the search is +currently not case-sensitive; this is so the search remains +case-insensitive. + + @kbd{C-M-w} and @kbd{C-M-y} modify the search string by only one +character at a time: @kbd{C-M-w} deletes the last character from the +search string and @kbd{C-M-y} copies the character after point to the +end of the search string. An alternative method to add the character +after point into the search string is to enter the minibuffer by +@kbd{M-e} and to type @kbd{C-f} at the end of the search string in the +minibuffer. + + The character @kbd{M-y} copies text from the kill ring into the search +string. It uses the same text that @kbd{C-y} as a command would yank. +@kbd{Mouse-2} in the echo area does the same. +@xref{Yanking}. + +@node Highlight Isearch +@subsection Lazy Search Highlighting +@cindex lazy search highlighting +@vindex isearch-lazy-highlight + + When you pause for a little while during incremental search, it +highlights all other possible matches for the search string. This +makes it easier to anticipate where you can get to by typing @kbd{C-s} +or @kbd{C-r} to repeat the search. The short delay before highlighting +other matches helps indicate which match is the current one. +If you don't like this feature, you can turn it off by setting +@code{isearch-lazy-highlight} to @code{nil}. + +@cindex faces for highlighting search matches + You can control how this highlighting looks by customizing the faces +@code{isearch} (used for the current match) and @code{lazy-highlight} +(for all the other matches). + +@node Isearch Scroll +@subsection Scrolling During Incremental Search + + You can enable the use of vertical scrolling during incremental +search (without exiting the search) by setting the customizable +variable @code{isearch-allow-scroll} to a non-@code{nil} value. This +applies to using the vertical scroll-bar and to certain keyboard +commands such as @kbd{@key{PRIOR}} (@code{scroll-down}), +@kbd{@key{NEXT}} (@code{scroll-up}) and @kbd{C-l} (@code{recenter}). +You must run these commands via their key sequences to stay in the +search---typing @kbd{M-x} will terminate the search. You can give +prefix arguments to these commands in the usual way. + + This feature won't let you scroll the current match out of visibility, +however. + + The feature also affects some other commands, such as @kbd{C-x 2} +(@code{split-window-vertically}) and @kbd{C-x ^} +(@code{enlarge-window}) which don't exactly scroll but do affect where +the text appears on the screen. In general, it applies to any command +whose name has a non-@code{nil} @code{isearch-scroll} property. So you +can control which commands are affected by changing these properties. + + For example, to make @kbd{C-h l} usable within an incremental search +in all future Emacs sessions, use @kbd{C-h c} to find what command it +runs. (You type @kbd{C-h c C-h l}; it says @code{view-lossage}.) +Then you can put the following line in your @file{.emacs} file +(@pxref{Init File}): + +@example +(put 'view-lossage 'isearch-scroll t) +@end example + +@noindent +This feature can be applied to any command that doesn't permanently +change point, the buffer contents, the match data, the current buffer, +or the selected window and frame. The command must not itself attempt +an incremental search. + +@node Slow Isearch +@subsection Slow Terminal Incremental Search + + Incremental search on a slow terminal uses a modified style of display +that is designed to take less time. Instead of redisplaying the buffer at +each place the search gets to, it creates a new single-line window and uses +that to display the line that the search has found. The single-line window +comes into play as soon as point moves outside of the text that is already +on the screen. + + When you terminate the search, the single-line window is removed. +Emacs then redisplays the window in which the search was done, to show +its new position of point. + +@vindex search-slow-speed + The slow terminal style of display is used when the terminal baud rate is +less than or equal to the value of the variable @code{search-slow-speed}, +initially 1200. See also the discussion of the variable @code{baud-rate} +(@pxref{baud-rate,, Customization of Display}). + +@vindex search-slow-window-lines + The number of lines to use in slow terminal search display is controlled +by the variable @code{search-slow-window-lines}. Its normal value is 1. + +@node Nonincremental Search +@section Nonincremental Search +@cindex nonincremental search + + Emacs also has conventional nonincremental search commands, which require +you to type the entire search string before searching begins. + +@table @kbd +@item C-s @key{RET} @var{string} @key{RET} +Search for @var{string}. +@item C-r @key{RET} @var{string} @key{RET} +Search backward for @var{string}. +@end table + + To do a nonincremental search, first type @kbd{C-s @key{RET}}. This +enters the minibuffer to read the search string; terminate the string +with @key{RET}, and then the search takes place. If the string is not +found, the search command signals an error. + + When you type @kbd{C-s @key{RET}}, the @kbd{C-s} invokes incremental +search as usual. That command is specially programmed to invoke +nonincremental search, @code{search-forward}, if the string you +specify is empty. (Such an empty argument would otherwise be +useless.) But it does not call @code{search-forward} right away. First +it checks the next input character to see if is @kbd{C-w}, +which specifies a word search. +@ifnottex +@xref{Word Search}. +@end ifnottex +@kbd{C-r @key{RET}} does likewise, for a reverse incremental search. + +@findex search-forward +@findex search-backward + Forward and backward nonincremental searches are implemented by the +commands @code{search-forward} and @code{search-backward}. These +commands may be bound to keys in the usual manner. The feature that you +can get to them via the incremental search commands exists for +historical reasons, and to avoid the need to find separate key sequences +for them. + +@node Word Search +@section Word Search +@cindex word search + + Word search searches for a sequence of words without regard to how the +words are separated. More precisely, you type a string of many words, +using single spaces to separate them, and the string can be found even +if there are multiple spaces, newlines, or other punctuation characters +between these words. + + Word search is useful for editing a printed document made with a text +formatter. If you edit while looking at the printed, formatted version, +you can't tell where the line breaks are in the source file. With word +search, you can search without having to know them. + +@table @kbd +@item C-s @key{RET} C-w @var{words} @key{RET} +Search for @var{words}, ignoring details of punctuation. +@item C-r @key{RET} C-w @var{words} @key{RET} +Search backward for @var{words}, ignoring details of punctuation. +@end table + + Word search as a special case of nonincremental search is invoked +with @kbd{C-s @key{RET} C-w}. This is followed by the search string, +which must always be terminated with @key{RET}. Being nonincremental, +this search does not start until the argument is terminated. It works +by constructing a regular expression and searching for that; see +@ref{Regexp Search}. + + Use @kbd{C-r @key{RET} C-w} to do backward word search. + + You can also invoke word search with @kbd{C-s M-e C-w} or @kbd{C-r +M-e C-w} followed by the search string and terminated with @key{RET}, +@kbd{C-s} or @kbd{C-r}. This puts word search into incremental mode +where you can use all keys available for incremental search. However, +when you type more words in incremental word search, it will fail +until you type complete words. + +@findex word-search-forward +@findex word-search-backward + Forward and backward word searches are implemented by the commands +@code{word-search-forward} and @code{word-search-backward}. These +commands may be bound to keys in the usual manner. They are available +via the incremental search commands both for historical reasons and +to avoid the need to find separate key sequences for them. + +@node Regexp Search +@section Regular Expression Search +@cindex regular expression +@cindex regexp + + A @dfn{regular expression} (@dfn{regexp}, for short) is a pattern +that denotes a class of alternative strings to match, possibly +infinitely many. GNU Emacs provides both incremental and +nonincremental ways to search for a match for a regexp. The syntax of +regular expressions is explained in the following section. + +@kindex C-M-s +@findex isearch-forward-regexp +@kindex C-M-r +@findex isearch-backward-regexp + Incremental search for a regexp is done by typing @kbd{C-M-s} +(@code{isearch-forward-regexp}), by invoking @kbd{C-s} with a +prefix argument (whose value does not matter), or by typing @kbd{M-r} +within a forward incremental search. This command reads a +search string incrementally just like @kbd{C-s}, but it treats the +search string as a regexp rather than looking for an exact match +against the text in the buffer. Each time you add text to the search +string, you make the regexp longer, and the new regexp is searched +for. To search backward for a regexp, use @kbd{C-M-r} +(@code{isearch-backward-regexp}), @kbd{C-r} with a prefix argument, +or @kbd{M-r} within a backward incremental search. + + All of the control characters that do special things within an +ordinary incremental search have the same function in incremental regexp +search. Typing @kbd{C-s} or @kbd{C-r} immediately after starting the +search retrieves the last incremental search regexp used; that is to +say, incremental regexp and non-regexp searches have independent +defaults. They also have separate search rings that you can access with +@kbd{M-p} and @kbd{M-n}. + +@vindex search-whitespace-regexp + If you type @key{SPC} in incremental regexp search, it matches any +sequence of whitespace characters, including newlines. If you want to +match just a space, type @kbd{C-q @key{SPC}}. You can control what a +bare space matches by setting the variable +@code{search-whitespace-regexp} to the desired regexp. + + In some cases, adding characters to the regexp in an incremental regexp +search can make the cursor move back and start again. For example, if +you have searched for @samp{foo} and you add @samp{\|bar}, the cursor +backs up in case the first @samp{bar} precedes the first @samp{foo}. + + Forward and backward regexp search are not symmetrical, because +regexp matching in Emacs always operates forward, starting with the +beginning of the regexp. Thus, forward regexp search scans forward, +trying a forward match at each possible starting position. Backward +regexp search scans backward, trying a forward match at each possible +starting position. These search methods are not mirror images. + +@findex re-search-forward +@findex re-search-backward + Nonincremental search for a regexp is done by the functions +@code{re-search-forward} and @code{re-search-backward}. You can invoke +these with @kbd{M-x}, or bind them to keys, or invoke them by way of +incremental regexp search with @kbd{C-M-s @key{RET}} and @kbd{C-M-r +@key{RET}}. + + If you use the incremental regexp search commands with a prefix +argument, they perform ordinary string search, like +@code{isearch-forward} and @code{isearch-backward}. @xref{Incremental +Search}. + +@node Regexps +@section Syntax of Regular Expressions +@cindex syntax of regexps + + This manual describes regular expression features that users +typically want to use. There are additional features that are +mainly used in Lisp programs; see @ref{Regular Expressions,,, +elisp, The Emacs Lisp Reference Manual}. + + Regular expressions have a syntax in which a few characters are +special constructs and the rest are @dfn{ordinary}. An ordinary +character is a simple regular expression which matches that same +character and nothing else. The special characters are @samp{$}, +@samp{^}, @samp{.}, @samp{*}, @samp{+}, @samp{?}, @samp{[}, and +@samp{\}. The character @samp{]} is special if it ends a character +alternative (see later). The character @samp{-} is special inside a +character alternative. Any other character appearing in a regular +expression is ordinary, unless a @samp{\} precedes it. (When you use +regular expressions in a Lisp program, each @samp{\} must be doubled, +see the example near the end of this section.) + + For example, @samp{f} is not a special character, so it is ordinary, and +therefore @samp{f} is a regular expression that matches the string +@samp{f} and no other string. (It does @emph{not} match the string +@samp{ff}.) Likewise, @samp{o} is a regular expression that matches +only @samp{o}. (When case distinctions are being ignored, these regexps +also match @samp{F} and @samp{O}, but we consider this a generalization +of ``the same string,'' rather than an exception.) + + Any two regular expressions @var{a} and @var{b} can be concatenated. The +result is a regular expression which matches a string if @var{a} matches +some amount of the beginning of that string and @var{b} matches the rest of +the string.@refill + + As a simple example, we can concatenate the regular expressions @samp{f} +and @samp{o} to get the regular expression @samp{fo}, which matches only +the string @samp{fo}. Still trivial. To do something nontrivial, you +need to use one of the special characters. Here is a list of them. + +@table @asis +@item @kbd{.}@: @r{(Period)} +is a special character that matches any single character except a newline. +Using concatenation, we can make regular expressions like @samp{a.b}, which +matches any three-character string that begins with @samp{a} and ends with +@samp{b}.@refill + +@item @kbd{*} +is not a construct by itself; it is a postfix operator that means to +match the preceding regular expression repetitively as many times as +possible. Thus, @samp{o*} matches any number of @samp{o}s (including no +@samp{o}s). + +@samp{*} always applies to the @emph{smallest} possible preceding +expression. Thus, @samp{fo*} has a repeating @samp{o}, not a repeating +@samp{fo}. It matches @samp{f}, @samp{fo}, @samp{foo}, and so on. + +The matcher processes a @samp{*} construct by matching, immediately, +as many repetitions as can be found. Then it continues with the rest +of the pattern. If that fails, backtracking occurs, discarding some +of the matches of the @samp{*}-modified construct in case that makes +it possible to match the rest of the pattern. For example, in matching +@samp{ca*ar} against the string @samp{caaar}, the @samp{a*} first +tries to match all three @samp{a}s; but the rest of the pattern is +@samp{ar} and there is only @samp{r} left to match, so this try fails. +The next alternative is for @samp{a*} to match only two @samp{a}s. +With this choice, the rest of the regexp matches successfully.@refill + +@item @kbd{+} +is a postfix operator, similar to @samp{*} except that it must match +the preceding expression at least once. So, for example, @samp{ca+r} +matches the strings @samp{car} and @samp{caaaar} but not the string +@samp{cr}, whereas @samp{ca*r} matches all three strings. + +@item @kbd{?} +is a postfix operator, similar to @samp{*} except that it can match the +preceding expression either once or not at all. For example, +@samp{ca?r} matches @samp{car} or @samp{cr}; nothing else. + +@item @kbd{*?}, @kbd{+?}, @kbd{??} +@cindex non-greedy regexp matching +are non-greedy variants of the operators above. The normal operators +@samp{*}, @samp{+}, @samp{?} are @dfn{greedy} in that they match as +much as they can, as long as the overall regexp can still match. With +a following @samp{?}, they are non-greedy: they will match as little +as possible. + +Thus, both @samp{ab*} and @samp{ab*?} can match the string @samp{a} +and the string @samp{abbbb}; but if you try to match them both against +the text @samp{abbb}, @samp{ab*} will match it all (the longest valid +match), while @samp{ab*?} will match just @samp{a} (the shortest +valid match). + +Non-greedy operators match the shortest possible string starting at a +given starting point; in a forward search, though, the earliest +possible starting point for match is always the one chosen. Thus, if +you search for @samp{a.*?$} against the text @samp{abbab} followed by +a newline, it matches the whole string. Since it @emph{can} match +starting at the first @samp{a}, it does. + +@item @kbd{\@{@var{n}\@}} +is a postfix operator that specifies repetition @var{n} times---that +is, the preceding regular expression must match exactly @var{n} times +in a row. For example, @samp{x\@{4\@}} matches the string @samp{xxxx} +and nothing else. + +@item @kbd{\@{@var{n},@var{m}\@}} +is a postfix operator that specifies repetition between @var{n} and +@var{m} times---that is, the preceding regular expression must match +at least @var{n} times, but no more than @var{m} times. If @var{m} is +omitted, then there is no upper limit, but the preceding regular +expression must match at least @var{n} times.@* @samp{\@{0,1\@}} is +equivalent to @samp{?}. @* @samp{\@{0,\@}} is equivalent to +@samp{*}. @* @samp{\@{1,\@}} is equivalent to @samp{+}. + +@item @kbd{[ @dots{} ]} +is a @dfn{character set}, which begins with @samp{[} and is terminated +by @samp{]}. In the simplest case, the characters between the two +brackets are what this set can match. + +Thus, @samp{[ad]} matches either one @samp{a} or one @samp{d}, and +@samp{[ad]*} matches any string composed of just @samp{a}s and @samp{d}s +(including the empty string), from which it follows that @samp{c[ad]*r} +matches @samp{cr}, @samp{car}, @samp{cdr}, @samp{caddaar}, etc. + +You can also include character ranges in a character set, by writing the +starting and ending characters with a @samp{-} between them. Thus, +@samp{[a-z]} matches any lower-case @acronym{ASCII} letter. Ranges may be +intermixed freely with individual characters, as in @samp{[a-z$%.]}, +which matches any lower-case @acronym{ASCII} letter or @samp{$}, @samp{%} or +period. + +Note that the usual regexp special characters are not special inside a +character set. A completely different set of special characters exists +inside character sets: @samp{]}, @samp{-} and @samp{^}. + +To include a @samp{]} in a character set, you must make it the first +character. For example, @samp{[]a]} matches @samp{]} or @samp{a}. To +include a @samp{-}, write @samp{-} as the first or last character of the +set, or put it after a range. Thus, @samp{[]-]} matches both @samp{]} +and @samp{-}. + +To include @samp{^} in a set, put it anywhere but at the beginning of +the set. (At the beginning, it complements the set---see below.) + +When you use a range in case-insensitive search, you should write both +ends of the range in upper case, or both in lower case, or both should +be non-letters. The behavior of a mixed-case range such as @samp{A-z} +is somewhat ill-defined, and it may change in future Emacs versions. + +@item @kbd{[^ @dots{} ]} +@samp{[^} begins a @dfn{complemented character set}, which matches any +character except the ones specified. Thus, @samp{[^a-z0-9A-Z]} matches +all characters @emph{except} @acronym{ASCII} letters and digits. + +@samp{^} is not special in a character set unless it is the first +character. The character following the @samp{^} is treated as if it +were first (in other words, @samp{-} and @samp{]} are not special there). + +A complemented character set can match a newline, unless newline is +mentioned as one of the characters not to match. This is in contrast to +the handling of regexps in programs such as @code{grep}. + +@item @kbd{^} +is a special character that matches the empty string, but only at the +beginning of a line in the text being matched. Otherwise it fails to +match anything. Thus, @samp{^foo} matches a @samp{foo} that occurs at +the beginning of a line. + +For historical compatibility reasons, @samp{^} can be used with this +meaning only at the beginning of the regular expression, or after +@samp{\(} or @samp{\|}. + +@item @kbd{$} +is similar to @samp{^} but matches only at the end of a line. Thus, +@samp{x+$} matches a string of one @samp{x} or more at the end of a line. + +For historical compatibility reasons, @samp{$} can be used with this +meaning only at the end of the regular expression, or before @samp{\)} +or @samp{\|}. + +@item @kbd{\} +has two functions: it quotes the special characters (including +@samp{\}), and it introduces additional special constructs. + +Because @samp{\} quotes special characters, @samp{\$} is a regular +expression that matches only @samp{$}, and @samp{\[} is a regular +expression that matches only @samp{[}, and so on. + +See the following section for the special constructs that begin +with @samp{\}. +@end table + + Note: for historical compatibility, special characters are treated as +ordinary ones if they are in contexts where their special meanings make no +sense. For example, @samp{*foo} treats @samp{*} as ordinary since there is +no preceding expression on which the @samp{*} can act. It is poor practice +to depend on this behavior; it is better to quote the special character anyway, +regardless of where it appears. + +As a @samp{\} is not special inside a character alternative, it can +never remove the special meaning of @samp{-} or @samp{]}. So you +should not quote these characters when they have no special meaning +either. This would not clarify anything, since backslashes can +legitimately precede these characters where they @emph{have} special +meaning, as in @samp{[^\]} (@code{"[^\\]"} for Lisp string syntax), +which matches any single character except a backslash. + +@node Regexp Backslash +@section Backslash in Regular Expressions + + For the most part, @samp{\} followed by any character matches only +that character. However, there are several exceptions: two-character +sequences starting with @samp{\} that have special meanings. The +second character in the sequence is always an ordinary character when +used on its own. Here is a table of @samp{\} constructs. + +@table @kbd +@item \| +specifies an alternative. Two regular expressions @var{a} and @var{b} +with @samp{\|} in between form an expression that matches some text if +either @var{a} matches it or @var{b} matches it. It works by trying to +match @var{a}, and if that fails, by trying to match @var{b}. + +Thus, @samp{foo\|bar} matches either @samp{foo} or @samp{bar} +but no other string.@refill + +@samp{\|} applies to the largest possible surrounding expressions. Only a +surrounding @samp{\( @dots{} \)} grouping can limit the grouping power of +@samp{\|}.@refill + +Full backtracking capability exists to handle multiple uses of @samp{\|}. + +@item \( @dots{} \) +is a grouping construct that serves three purposes: + +@enumerate +@item +To enclose a set of @samp{\|} alternatives for other operations. +Thus, @samp{\(foo\|bar\)x} matches either @samp{foox} or @samp{barx}. + +@item +To enclose a complicated expression for the postfix operators @samp{*}, +@samp{+} and @samp{?} to operate on. Thus, @samp{ba\(na\)*} matches +@samp{bananana}, etc., with any (zero or more) number of @samp{na} +strings.@refill + +@item +To record a matched substring for future reference. +@end enumerate + +This last application is not a consequence of the idea of a +parenthetical grouping; it is a separate feature that is assigned as a +second meaning to the same @samp{\( @dots{} \)} construct. In practice +there is usually no conflict between the two meanings; when there is +a conflict, you can use a ``shy'' group. + +@item \(?: @dots{} \) +@cindex shy group, in regexp +specifies a ``shy'' group that does not record the matched substring; +you can't refer back to it with @samp{\@var{d}}. This is useful +in mechanically combining regular expressions, so that you +can add groups for syntactic purposes without interfering with +the numbering of the groups that are meant to be referred to. + +@item \@var{d} +@cindex back reference, in regexp +matches the same text that matched the @var{d}th occurrence of a +@samp{\( @dots{} \)} construct. This is called a @dfn{back +reference}. + +After the end of a @samp{\( @dots{} \)} construct, the matcher remembers +the beginning and end of the text matched by that construct. Then, +later on in the regular expression, you can use @samp{\} followed by the +digit @var{d} to mean ``match the same text matched the @var{d}th time +by the @samp{\( @dots{} \)} construct.'' + +The strings matching the first nine @samp{\( @dots{} \)} constructs +appearing in a regular expression are assigned numbers 1 through 9 in +the order that the open-parentheses appear in the regular expression. +So you can use @samp{\1} through @samp{\9} to refer to the text matched +by the corresponding @samp{\( @dots{} \)} constructs. + +For example, @samp{\(.*\)\1} matches any newline-free string that is +composed of two identical halves. The @samp{\(.*\)} matches the first +half, which may be anything, but the @samp{\1} that follows must match +the same exact text. + +If a particular @samp{\( @dots{} \)} construct matches more than once +(which can easily happen if it is followed by @samp{*}), only the last +match is recorded. + +@item \` +matches the empty string, but only at the beginning of the string or +buffer (or its accessible portion) being matched against. + +@item \' +matches the empty string, but only at the end of the string or buffer +(or its accessible portion) being matched against. + +@item \= +matches the empty string, but only at point. + +@item \b +matches the empty string, but only at the beginning or +end of a word. Thus, @samp{\bfoo\b} matches any occurrence of +@samp{foo} as a separate word. @samp{\bballs?\b} matches +@samp{ball} or @samp{balls} as a separate word.@refill + +@samp{\b} matches at the beginning or end of the buffer +regardless of what text appears next to it. + +@item \B +matches the empty string, but @emph{not} at the beginning or +end of a word. + +@item \< +matches the empty string, but only at the beginning of a word. +@samp{\<} matches at the beginning of the buffer only if a +word-constituent character follows. + +@item \> +matches the empty string, but only at the end of a word. @samp{\>} +matches at the end of the buffer only if the contents end with a +word-constituent character. + +@item \w +matches any word-constituent character. The syntax table +determines which characters these are. @xref{Syntax}. + +@item \W +matches any character that is not a word-constituent. + +@item \_< +matches the empty string, but only at the beginning of a symbol. +A symbol is a sequence of one or more symbol-constituent characters. +A symbol-constituent character is a character whose syntax is either +@samp{w} or @samp{_}. @samp{\_<} matches at the beginning of the +buffer only if a symbol-constituent character follows. + +@item \_> +matches the empty string, but only at the end of a symbol. @samp{\_>} +matches at the end of the buffer only if the contents end with a +symbol-constituent character. + +@item \s@var{c} +matches any character whose syntax is @var{c}. Here @var{c} is a +character that designates a particular syntax class: thus, @samp{w} +for word constituent, @samp{-} or @samp{ } for whitespace, @samp{.} +for ordinary punctuation, etc. @xref{Syntax}. + +@item \S@var{c} +matches any character whose syntax is not @var{c}. + +@cindex categories of characters +@cindex characters which belong to a specific language +@findex describe-categories +@item \c@var{c} +matches any character that belongs to the category @var{c}. For +example, @samp{\cc} matches Chinese characters, @samp{\cg} matches +Greek characters, etc. For the description of the known categories, +type @kbd{M-x describe-categories @key{RET}}. + +@item \C@var{c} +matches any character that does @emph{not} belong to category +@var{c}. +@end table + + The constructs that pertain to words and syntax are controlled by the +setting of the syntax table (@pxref{Syntax}). + +@node Regexp Example +@section Regular Expression Example + + Here is a complicated regexp---a simplified version of the regexp +that Emacs uses, by default, to recognize the end of a sentence +together with any whitespace that follows. We show its Lisp syntax to +distinguish the spaces from the tab characters. In Lisp syntax, the +string constant begins and ends with a double-quote. @samp{\"} stands +for a double-quote as part of the regexp, @samp{\\} for a backslash as +part of the regexp, @samp{\t} for a tab, and @samp{\n} for a newline. + +@example +"[.?!][]\"')]*\\($\\| $\\|\t\\| \\)[ \t\n]*" +@end example + +@noindent +This contains four parts in succession: a character set matching +period, @samp{?}, or @samp{!}; a character set matching +close-brackets, quotes, or parentheses, repeated zero or more times; a +set of alternatives within backslash-parentheses that matches either +end-of-line, a space at the end of a line, a tab, or two spaces; and a +character set matching whitespace characters, repeated any number of +times. + + To enter the same regexp in incremental search, you would type +@key{TAB} to enter a tab, and @kbd{C-j} to enter a newline. You would +also type single backslashes as themselves, instead of doubling them +for Lisp syntax. In commands that use ordinary minibuffer input to +read a regexp, you would quote the @kbd{C-j} by preceding it with a +@kbd{C-q} to prevent @kbd{C-j} from exiting the minibuffer. + +@node Search Case +@section Searching and Case + + Incremental searches in Emacs normally ignore the case of the text +they are searching through, if you specify the text in lower case. +Thus, if you specify searching for @samp{foo}, then @samp{Foo} and +@samp{foo} are also considered a match. Regexps, and in particular +character sets, are included: @samp{[ab]} would match @samp{a} or +@samp{A} or @samp{b} or @samp{B}.@refill + + An upper-case letter anywhere in the incremental search string makes +the search case-sensitive. Thus, searching for @samp{Foo} does not find +@samp{foo} or @samp{FOO}. This applies to regular expression search as +well as to string search. The effect ceases if you delete the +upper-case letter from the search string. + + Typing @kbd{M-c} within an incremental search toggles the case +sensitivity of that search. The effect does not extend beyond the +current incremental search to the next one, but it does override the +effect of including an upper-case letter in the current search. + +@vindex case-fold-search +@vindex default-case-fold-search + If you set the variable @code{case-fold-search} to @code{nil}, then +all letters must match exactly, including case. This is a per-buffer +variable; altering the variable affects only the current buffer, but +there is a default value in @code{default-case-fold-search} that you +can also set. @xref{Locals}. This variable applies to nonincremental +searches also, including those performed by the replace commands +(@pxref{Replace}) and the minibuffer history matching commands +(@pxref{Minibuffer History}). + + Several related variables control case-sensitivity of searching and +matching for specific commands or activities. For instance, +@code{tags-case-fold-search} controls case sensitivity for +@code{find-tag}. To find these variables, do @kbd{M-x +apropos-variable @key{RET} case-fold-search @key{RET}}. + +@node Replace +@section Replacement Commands +@cindex replacement +@cindex search-and-replace commands +@cindex string substitution +@cindex global substitution + + Global search-and-replace operations are not needed often in Emacs, +but they are available. In addition to the simple @kbd{M-x +replace-string} command which replaces all occurrences, +there is @kbd{M-%} (@code{query-replace}), which presents each occurrence +of the pattern and asks you whether to replace it. + + The replace commands normally operate on the text from point to the +end of the buffer; however, in Transient Mark mode (@pxref{Transient +Mark}), when the mark is active, they operate on the region. The +basic replace commands replace one string (or regexp) with one +replacement string. It is possible to perform several replacements in +parallel using the command @code{expand-region-abbrevs} +(@pxref{Expanding Abbrevs}). + +@menu +* Unconditional Replace:: Replacing all matches for a string. +* Regexp Replace:: Replacing all matches for a regexp. +* Replacement and Case:: How replacements preserve case of letters. +* Query Replace:: How to use querying. +@end menu + +@node Unconditional Replace, Regexp Replace, Replace, Replace +@subsection Unconditional Replacement +@findex replace-string + +@table @kbd +@item M-x replace-string @key{RET} @var{string} @key{RET} @var{newstring} @key{RET} +Replace every occurrence of @var{string} with @var{newstring}. +@end table + + To replace every instance of @samp{foo} after point with @samp{bar}, +use the command @kbd{M-x replace-string} with the two arguments +@samp{foo} and @samp{bar}. Replacement happens only in the text after +point, so if you want to cover the whole buffer you must go to the +beginning first. All occurrences up to the end of the buffer are +replaced; to limit replacement to part of the buffer, narrow to that +part of the buffer before doing the replacement (@pxref{Narrowing}). +In Transient Mark mode, when the region is active, replacement is +limited to the region (@pxref{Transient Mark}). + + When @code{replace-string} exits, it leaves point at the last +occurrence replaced. It sets the mark to the prior position of point +(where the @code{replace-string} command was issued); use @kbd{C-u +C-@key{SPC}} to move back there. + + A numeric argument restricts replacement to matches that are surrounded +by word boundaries. The argument's value doesn't matter. + + @xref{Replacement and Case}, for details about case-sensitivity in +replace commands. + + What if you want to exchange @samp{x} and @samp{y}: replace every @samp{x} with a @samp{y} and vice versa? You can do it this way: + +@example +M-x replace-string @key{RET} x @key{RET} @@TEMP@@ @key{RET} +M-< M-x replace-string @key{RET} y @key{RET} x @key{RET} +M-< M-x replace-string @key{RET} @@TEMP@@ @key{RET} y @key{RET} +@end example + +@noindent +This works provided the string @samp{@@TEMP@@} does not appear +in your text. + +@node Regexp Replace, Replacement and Case, Unconditional Replace, Replace +@subsection Regexp Replacement +@findex replace-regexp + + The @kbd{M-x replace-string} command replaces exact matches for a +single string. The similar command @kbd{M-x replace-regexp} replaces +any match for a specified pattern. + +@table @kbd +@item M-x replace-regexp @key{RET} @var{regexp} @key{RET} @var{newstring} @key{RET} +Replace every match for @var{regexp} with @var{newstring}. +@end table + +@cindex back reference, in regexp replacement + In @code{replace-regexp}, the @var{newstring} need not be constant: +it can refer to all or part of what is matched by the @var{regexp}. +@samp{\&} in @var{newstring} stands for the entire match being +replaced. @samp{\@var{d}} in @var{newstring}, where @var{d} is a +digit, stands for whatever matched the @var{d}th parenthesized +grouping in @var{regexp}. (This is called a ``back reference.'') +@samp{\#} refers to the count of replacements already made in this +command, as a decimal number. In the first replacement, @samp{\#} +stands for @samp{0}; in the second, for @samp{1}; and so on. For +example, + +@example +M-x replace-regexp @key{RET} c[ad]+r @key{RET} \&-safe @key{RET} +@end example + +@noindent +replaces (for example) @samp{cadr} with @samp{cadr-safe} and @samp{cddr} +with @samp{cddr-safe}. + +@example +M-x replace-regexp @key{RET} \(c[ad]+r\)-safe @key{RET} \1 @key{RET} +@end example + +@noindent +performs the inverse transformation. To include a @samp{\} in the +text to replace with, you must enter @samp{\\}. + + If you want to enter part of the replacement string by hand each +time, use @samp{\?} in the replacement string. Each replacement will +ask you to edit the replacement string in the minibuffer, putting +point where the @samp{\?} was. + + The remainder of this subsection is intended for specialized tasks +and requires knowledge of Lisp. Most readers can skip it. + + You can use Lisp expressions to calculate parts of the +replacement string. To do this, write @samp{\,} followed by the +expression in the replacement string. Each replacement calculates the +value of the expression and converts it to text without quoting (if +it's a string, this means using the string's contents), and uses it in +the replacement string in place of the expression itself. If the +expression is a symbol, one space in the replacement string after the +symbol name goes with the symbol name, so the value replaces them +both. + + Inside such an expression, you can use some special sequences. +@samp{\&} and @samp{\@var{n}} refer here, as usual, to the entire +match as a string, and to a submatch as a string. @var{n} may be +multiple digits, and the value of @samp{\@var{n}} is @code{nil} if +subexpression @var{n} did not match. You can also use @samp{\#&} and +@samp{\#@var{n}} to refer to those matches as numbers (this is valid +when the match or submatch has the form of a numeral). @samp{\#} here +too stands for the number of already-completed replacements. + + Repeating our example to exchange @samp{x} and @samp{y}, we can thus +do it also this way: + +@example +M-x replace-regexp @key{RET} \(x\)\|y @key{RET} +\,(if \1 "y" "x") @key{RET} +@end example + + For computing replacement strings for @samp{\,}, the @code{format} +function is often useful (@pxref{Formatting Strings,,, elisp, The Emacs +Lisp Reference Manual}). For example, to add consecutively numbered +strings like @samp{ABC00042} to columns 73 @w{to 80} (unless they are +already occupied), you can use + +@example +M-x replace-regexp @key{RET} ^.\@{0,72\@}$ @key{RET} +\,(format "%-72sABC%05d" \& \#) @key{RET} +@end example + +@node Replacement and Case, Query Replace, Regexp Replace, Replace +@subsection Replace Commands and Case + + If the first argument of a replace command is all lower case, the +command ignores case while searching for occurrences to +replace---provided @code{case-fold-search} is non-@code{nil}. If +@code{case-fold-search} is set to @code{nil}, case is always significant +in all searches. + +@vindex case-replace + In addition, when the @var{newstring} argument is all or partly lower +case, replacement commands try to preserve the case pattern of each +occurrence. Thus, the command + +@example +M-x replace-string @key{RET} foo @key{RET} bar @key{RET} +@end example + +@noindent +replaces a lower case @samp{foo} with a lower case @samp{bar}, an +all-caps @samp{FOO} with @samp{BAR}, and a capitalized @samp{Foo} with +@samp{Bar}. (These three alternatives---lower case, all caps, and +capitalized, are the only ones that @code{replace-string} can +distinguish.) + + If upper-case letters are used in the replacement string, they remain +upper case every time that text is inserted. If upper-case letters are +used in the first argument, the second argument is always substituted +exactly as given, with no case conversion. Likewise, if either +@code{case-replace} or @code{case-fold-search} is set to @code{nil}, +replacement is done without case conversion. + +@node Query Replace,, Replacement and Case, Replace +@subsection Query Replace +@cindex query replace + +@table @kbd +@item M-% @var{string} @key{RET} @var{newstring} @key{RET} +@itemx M-x query-replace @key{RET} @var{string} @key{RET} @var{newstring} @key{RET} +Replace some occurrences of @var{string} with @var{newstring}. +@item C-M-% @var{regexp} @key{RET} @var{newstring} @key{RET} +@itemx M-x query-replace-regexp @key{RET} @var{regexp} @key{RET} @var{newstring} @key{RET} +Replace some matches for @var{regexp} with @var{newstring}. +@end table + +@kindex M-% +@findex query-replace + If you want to change only some of the occurrences of @samp{foo} to +@samp{bar}, not all of them, then you cannot use an ordinary +@code{replace-string}. Instead, use @kbd{M-%} (@code{query-replace}). +This command finds occurrences of @samp{foo} one by one, displays each +occurrence and asks you whether to replace it. Aside from querying, +@code{query-replace} works just like @code{replace-string}. It +preserves case, like @code{replace-string}, provided +@code{case-replace} is non-@code{nil}, as it normally is +(@pxref{Replacement and Case}). A numeric argument means consider +only occurrences that are bounded by word-delimiter characters. + +@kindex C-M-% +@findex query-replace-regexp + @kbd{C-M-%} performs regexp search and replace (@code{query-replace-regexp}). +It works like @code{replace-regexp} except that it queries +like @code{query-replace}. + +@cindex faces for highlighting query replace + These commands highlight the current match using the face +@code{query-replace}. They highlight other matches using +@code{lazy-highlight} just like incremental search (@pxref{Incremental +Search}). + + The characters you can type when you are shown a match for the string +or regexp are: + +@ignore @c Not worth it. +@kindex SPC @r{(query-replace)} +@kindex DEL @r{(query-replace)} +@kindex , @r{(query-replace)} +@kindex RET @r{(query-replace)} +@kindex . @r{(query-replace)} +@kindex ! @r{(query-replace)} +@kindex ^ @r{(query-replace)} +@kindex C-r @r{(query-replace)} +@kindex C-w @r{(query-replace)} +@kindex C-l @r{(query-replace)} +@end ignore + +@c WideCommands +@table @kbd +@item @key{SPC} +to replace the occurrence with @var{newstring}. + +@item @key{DEL} +to skip to the next occurrence without replacing this one. + +@item , @r{(Comma)} +to replace this occurrence and display the result. You are then asked +for another input character to say what to do next. Since the +replacement has already been made, @key{DEL} and @key{SPC} are +equivalent in this situation; both move to the next occurrence. + +You can type @kbd{C-r} at this point (see below) to alter the replaced +text. You can also type @kbd{C-x u} to undo the replacement; this exits +the @code{query-replace}, so if you want to do further replacement you +must use @kbd{C-x @key{ESC} @key{ESC} @key{RET}} to restart +(@pxref{Repetition}). + +@item @key{RET} +to exit without doing any more replacements. + +@item .@: @r{(Period)} +to replace this occurrence and then exit without searching for more +occurrences. + +@item ! +to replace all remaining occurrences without asking again. + +@item ^ +to go back to the position of the previous occurrence (or what used to +be an occurrence), in case you changed it by mistake or want to +reexamine it. + +@item C-r +to enter a recursive editing level, in case the occurrence needs to be +edited rather than just replaced with @var{newstring}. When you are +done, exit the recursive editing level with @kbd{C-M-c} to proceed to +the next occurrence. @xref{Recursive Edit}. + +@item C-w +to delete the occurrence, and then enter a recursive editing level as in +@kbd{C-r}. Use the recursive edit to insert text to replace the deleted +occurrence of @var{string}. When done, exit the recursive editing level +with @kbd{C-M-c} to proceed to the next occurrence. + +@item e +to edit the replacement string in the minibuffer. When you exit the +minibuffer by typing @key{RET}, the minibuffer contents replace the +current occurrence of the pattern. They also become the new +replacement string for any further occurrences. + +@item C-l +to redisplay the screen. Then you must type another character to +specify what to do with this occurrence. + +@item C-h +to display a message summarizing these options. Then you must type +another character to specify what to do with this occurrence. +@end table + + Some other characters are aliases for the ones listed above: @kbd{y}, +@kbd{n} and @kbd{q} are equivalent to @key{SPC}, @key{DEL} and +@key{RET}. + + Aside from this, any other character exits the @code{query-replace}, +and is then reread as part of a key sequence. Thus, if you type +@kbd{C-k}, it exits the @code{query-replace} and then kills to end of +line. + + To restart a @code{query-replace} once it is exited, use @kbd{C-x +@key{ESC} @key{ESC}}, which repeats the @code{query-replace} because it +used the minibuffer to read its arguments. @xref{Repetition, C-x ESC +ESC}. + + @xref{Operating on Files}, for the Dired @kbd{Q} command which +performs query replace on selected files. See also @ref{Transforming +File Names}, for Dired commands to rename, copy, or link files by +replacing regexp matches in file names. + +@node Other Repeating Search +@section Other Search-and-Loop Commands + + Here are some other commands that find matches for a regular +expression. They all ignore case in matching, if the pattern contains +no upper-case letters and @code{case-fold-search} is non-@code{nil}. +Aside from @code{occur} and its variants, all operate on the text from +point to the end of the buffer, or on the active region in Transient +Mark mode. + +@findex list-matching-lines +@findex occur +@findex multi-occur +@findex multi-occur-in-matching-buffers +@findex how-many +@findex delete-non-matching-lines +@findex delete-matching-lines +@findex flush-lines +@findex keep-lines + +@table @kbd +@item M-x occur @key{RET} @var{regexp} @key{RET} +Display a list showing each line in the buffer that contains a match +for @var{regexp}. To limit the search to part of the buffer, narrow +to that part (@pxref{Narrowing}). A numeric argument @var{n} +specifies that @var{n} lines of context are to be displayed before and +after each matching line. Currently, @code{occur} can not correctly +handle multiline matches. + +@kindex RET @r{(Occur mode)} +@kindex o @r{(Occur mode)} +@kindex C-o @r{(Occur mode)} +The buffer @samp{*Occur*} containing the output serves as a menu for +finding the occurrences in their original context. Click +@kbd{Mouse-2} on an occurrence listed in @samp{*Occur*}, or position +point there and type @key{RET}; this switches to the buffer that was +searched and moves point to the original of the chosen occurrence. +@kbd{o} and @kbd{C-o} display the match in another window; @kbd{C-o} +does not select it. + +After using @kbd{M-x occur}, you can use @code{next-error} to visit +the occurrences found, one by one. @ref{Compilation Mode}. + +@item M-x list-matching-lines +Synonym for @kbd{M-x occur}. + +@item M-x multi-occur @key{RET} @var{buffers} @key{RET} @var{regexp} @key{RET} +This function is just like @code{occur}, except it is able to search +through multiple buffers. It asks you to specify the buffer names one by one. + +@item M-x multi-occur-in-matching-buffers @key{RET} @var{bufregexp} @key{RET} @var{regexp} @key{RET} +This function is similar to @code{multi-occur}, except the buffers to +search are specified by a regular expression that matches visited +file names. With a prefix argument, it uses the regular expression to match +buffer names instead. + +@item M-x how-many @key{RET} @var{regexp} @key{RET} +Print the number of matches for @var{regexp} that exist in the buffer +after point. In Transient Mark mode, if the region is active, the +command operates on the region instead. + +@item M-x flush-lines @key{RET} @var{regexp} @key{RET} +This command deletes each line that contains a match for @var{regexp}, +operating on the text after point; it deletes the current line +if it contains a match starting after point. In Transient Mark mode, +if the region is active, the command operates on the region instead; +it deletes a line partially contained in the region if it contains a +match entirely contained in the region. + +If a match is split across lines, @code{flush-lines} deletes all those +lines. It deletes the lines before starting to look for the next +match; hence, it ignores a match starting on the same line at which +another match ended. + +@item M-x keep-lines @key{RET} @var{regexp} @key{RET} +This command deletes each line that @emph{does not} contain a match for +@var{regexp}, operating on the text after point; if point is not at the +beginning of a line, it always keeps the current line. In Transient +Mark mode, if the region is active, the command operates on the region +instead; it never deletes lines that are only partially contained in +the region (a newline that ends a line counts as part of that line). + +If a match is split across lines, this command keeps all those lines. +@end table + +@ignore + arch-tag: fd9d8e77-66af-491c-b212-d80999613e3e +@end ignore diff --git a/doc/emacs/sending.texi b/doc/emacs/sending.texi new file mode 100644 index 00000000000..5d6a7c83f3e --- /dev/null +++ b/doc/emacs/sending.texi @@ -0,0 +1,724 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, 2002, +@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Sending Mail +@chapter Sending Mail +@cindex sending mail +@cindex mail +@cindex message + + To send a message in Emacs, you start by typing a command (@kbd{C-x m}) +to select and initialize the @samp{*mail*} buffer. Then you edit the text +and headers of the message in this buffer, and type another command +(@kbd{C-c C-s} or @kbd{C-c C-c}) to send the message. + +@table @kbd +@item C-x m +Begin composing a message to send (@code{compose-mail}). +@item C-x 4 m +Likewise, but display the message in another window +(@code{compose-mail-other-window}). +@item C-x 5 m +Likewise, but make a new frame (@code{compose-mail-other-frame}). +@item C-c C-s +In Mail mode, send the message (@code{mail-send}). +@item C-c C-c +Send the message and bury the mail buffer (@code{mail-send-and-exit}). +@end table + +@kindex C-x m +@findex compose-mail +@kindex C-x 4 m +@findex compose-mail-other-window +@kindex C-x 5 m +@findex compose-mail-other-frame + The command @kbd{C-x m} (@code{compose-mail}) selects a buffer named +@samp{*mail*} and initializes it with the skeleton of an outgoing +message. @kbd{C-x 4 m} (@code{compose-mail-other-window}) selects the +@samp{*mail*} buffer in a different window, leaving the previous current +buffer visible. @kbd{C-x 5 m} (@code{compose-mail-other-frame}) creates +a new frame to select the @samp{*mail*} buffer. + + Because the mail-composition buffer is an ordinary Emacs buffer, you can +switch to other buffers while in the middle of composing mail, and switch +back later (or never). If you use the @kbd{C-x m} command again when you +have been composing another message but have not sent it, you are asked to +confirm before the old message is erased. If you answer @kbd{n}, the +@samp{*mail*} buffer remains selected with its old contents, so you can +finish the old message and send it. @kbd{C-u C-x m} is another way to do +this. Sending the message marks the @samp{*mail*} buffer ``unmodified,'' +which avoids the need for confirmation when @kbd{C-x m} is next used. + + If you are composing a message in the @samp{*mail*} buffer and want to +send another message before finishing the first, rename the +@samp{*mail*} buffer using @kbd{M-x rename-uniquely} (@pxref{Misc +Buffer}). Then you can use @kbd{C-x m} or its variants described above +to make a new @samp{*mail*} buffer. Once you've done that, you can work +with each mail buffer independently. + +@vindex mail-default-directory + The variable @code{mail-default-directory} controls the default +directory for mail buffers, and also says where to put their auto-save +files. + +@ignore +@c Commented out because it is not user-oriented; +@c it doesn't say how to do some job. -- rms. +@cindex directory servers +@cindex LDAP +@cindex PH/QI +@cindex names and addresses +There is an interface to directory servers using various protocols such +as LDAP or the CCSO white pages directory system (PH/QI), described in a +separate manual. It may be useful for looking up names and addresses. +@xref{Top,,EUDC, eudc, EUDC Manual}. +@end ignore + +@menu +* Format: Mail Format. Format of the mail being composed. +* Headers: Mail Headers. Details of permitted mail header fields. +* Aliases: Mail Aliases. Abbreviating and grouping mail addresses. +* Mode: Mail Mode. Special commands for editing mail being composed. +* Amuse: Mail Amusements. Distracting the NSA; adding fortune messages. +* Methods: Mail Methods. Using alternative mail-composition methods. +@end menu + +@node Mail Format +@section The Format of the Mail Buffer + + In addition to the @dfn{text} or @dfn{body}, a message has @dfn{header +fields} which say who sent it, when, to whom, why, and so on. Some +header fields, such as @samp{Date} and @samp{Sender}, are created +automatically when you send the message. Others, such as the recipient +names, must be specified by you in order to send the message properly. + + In the mail buffer, you can insert and edit header fields using +ordinary editing commands. Mail mode provides a commands to help you +edit some header fields, and some are preinitialized in the buffer +automatically when appropriate. + + The line in the buffer that says + +@example +--text follows this line-- +@end example + +@noindent +is a special delimiter that separates the headers you have specified from +the text. Whatever follows this line is the text of the message; the +headers precede it. The delimiter line itself does not appear in the +message actually sent. The text used for the delimiter line is controlled +by the variable @code{mail-header-separator}. + + Here is an example of what the headers and text in the mail buffer +might look like. + +@example +To: gnu@@gnu.org +CC: lungfish@@spam.org, byob@@spam.org +Subject: The Emacs Manual +--Text follows this line-- +Please ignore this message. +@end example + +@node Mail Headers +@section Mail Header Fields +@cindex headers (of mail message) + + A header field in the mail buffer starts with a field name at the +beginning of a line, terminated by a colon. Upper and lower case are +equivalent in field names (and in mailing addresses also). After the +colon and optional whitespace comes the contents of the field. + + You can use any name you like for a header field, but normally people +use only standard field names with accepted meanings. Here is a table +of fields commonly used in outgoing messages. + +@table @samp +@item To +This field contains the mailing addresses to which the message is +addressed. If you list more than one address, use commas, not spaces, +to separate them. + +@item Subject +The contents of the @samp{Subject} field should be a piece of text +that says what the message is about. The reason @samp{Subject} fields +are useful is that most mail-reading programs can provide a summary of +messages, listing the subject of each message but not its text. + +@item CC +This field contains additional mailing addresses to send the message to, +like @samp{To} except that these readers should not regard the message +as directed at them. + +@item BCC +This field contains additional mailing addresses to send the message to, +which should not appear in the header of the message actually sent. +Copies sent this way are called @dfn{blind carbon copies}. + +@vindex mail-self-blind +@cindex copy of every outgoing message +To send a blind carbon copy of every outgoing message to yourself, set +the variable @code{mail-self-blind} to @code{t}. To send a blind carbon +copy of every message to some other @var{address}, set the variable +@code{mail-default-headers} to @code{"Bcc: @var{address}\n"}. + +@item FCC +This field contains the name of one file and directs Emacs to append a +copy of the message to that file when you send the message. If the file +is in Rmail format, Emacs writes the message in Rmail format; otherwise, +Emacs writes the message in system mail file format. To specify +more than one file, use several @samp{FCC} fields, with one file +name in each field. + +@vindex mail-archive-file-name +To put a fixed file name in the @samp{FCC} field each time you start +editing an outgoing message, set the variable +@code{mail-archive-file-name} to that file name. Unless you remove the +@samp{FCC} field before sending, the message will be written into that +file when it is sent. + +@item From +Use the @samp{From} field to say who you are, when the account you are +using to send the mail is not your own. The contents of the @samp{From} +field should be a valid mailing address, since replies will normally go +there. If you don't specify the @samp{From} field yourself, Emacs uses +the value of @code{user-mail-address} as the default. + +@item Reply-to +Use this field to direct replies to a different address. Most +mail-reading programs (including Rmail) automatically send replies to +the @samp{Reply-to} address in preference to the @samp{From} address. +By adding a @samp{Reply-to} field to your header, you can work around +any problems your @samp{From} address may cause for replies. + +@cindex @env{REPLYTO} environment variable +@vindex mail-default-reply-to +To put a fixed @samp{Reply-to} address into every outgoing message, set +the variable @code{mail-default-reply-to} to that address (as a string). +Then @code{mail} initializes the message with a @samp{Reply-to} field as +specified. You can delete or alter that header field before you send +the message, if you wish. When Emacs starts up, if the environment +variable @env{REPLYTO} is set, @code{mail-default-reply-to} is +initialized from that environment variable. + +@item In-reply-to +This field contains a piece of text describing the message you are +replying to. Some mail systems can use this information to correlate +related pieces of mail. Normally this field is filled in by Rmail +when you reply to a message in Rmail, and you never need to +think about it (@pxref{Rmail}). + +@item References +This field lists the message IDs of related previous messages. Rmail +sets up this field automatically when you reply to a message. +@end table + + The @samp{To}, @samp{CC}, and @samp{BCC} header fields can appear +any number of times, and each such header field can contain multiple +addresses, separated by commas. This way, you can specify any number +of places to send the message. These fields can also have +continuation lines: one or more lines starting with whitespace, +following the starting line of the field, are considered part of the +field. Here's an example of a @samp{To} field with a continuation +line: + +@example +@group +To: foo@@here.net, this@@there.net, + me@@gnu.cambridge.mass.usa.earth.spiral3281 +@end group +@end example + +@vindex mail-from-style + When you send the message, if you didn't write a @samp{From} field +yourself, Emacs puts in one for you. The variable +@code{mail-from-style} controls the format: + +@table @code +@item nil +Use just the email address, as in @samp{king@@grassland.com}. +@item parens +Use both email address and full name, as in:@* +@samp{king@@grassland.com (Elvis Parsley)}. +@item angles +Use both email address and full name, as in:@* +@samp{Elvis Parsley <king@@grassland.com>}. +@item system-default +Allow the system to insert the @samp{From} field. +@end table + +@vindex mail-default-headers + You can direct Emacs to insert certain default headers into the +outgoing message by setting the variable @code{mail-default-headers} +to a string. Then @code{C-x m} inserts this string into the message +headers. If the default header fields are not appropriate for a +particular message, edit them as appropriate before sending the +message. + +@node Mail Aliases +@section Mail Aliases +@cindex mail aliases +@cindex @file{.mailrc} file +@cindex mailrc file + + You can define @dfn{mail aliases} in a file named @file{~/.mailrc}. +These are short mnemonic names which stand for mail addresses or groups of +mail addresses. Like many other mail programs, Emacs expands aliases +when they occur in the @samp{To}, @samp{From}, @samp{CC}, @samp{BCC}, and +@samp{Reply-to} fields, plus their @samp{Resent-} variants. + + To define an alias in @file{~/.mailrc}, write a line in the following +format: + +@example +alias @var{shortaddress} @var{fulladdresses} +@end example + +@noindent +Here @var{fulladdresses} stands for one or more mail addresses for +@var{shortaddress} to expand into. Separate multiple addresses with +spaces; if an address contains a space, quote the whole address with a +pair of double-quotes. + +For instance, to make @code{maingnu} stand for +@code{gnu@@gnu.org} plus a local address of your own, put in +this line:@refill + +@example +alias maingnu gnu@@gnu.org local-gnu +@end example + +@noindent +Addresses specified in this way should use doublequotes around an +entire address when the address contains spaces. But you need not +include doublequotes around parts of the address, such as the person's +full name. Emacs puts them in if they are needed. For example, + +@example +alias chief-torturer "George W. Bush <bush@@whitehouse.gov>" +@end example + +@noindent +is correct in @samp{.mailrc}. Emacs will insert the address as +@samp{"George W. Bush" <bush@@whitehouse.gov>}. + + Emacs also recognizes ``include'' commands in @samp{.mailrc} files. +They look like this: + +@example +source @var{filename} +@end example + +@noindent +The file @file{~/.mailrc} is used primarily by other mail-reading +programs; it can contain various other commands. Emacs ignores +everything in it except for alias definitions and include commands. + +@findex define-mail-alias + Another way to define a mail alias, within Emacs alone, is with the +@code{define-mail-alias} command. It prompts for the alias and then the +full address. You can use it to define aliases in your @file{.emacs} +file, like this: + +@example +(define-mail-alias "maingnu" "gnu@@gnu.org") +@end example + +@vindex mail-aliases + @code{define-mail-alias} records aliases by adding them to a +variable named @code{mail-aliases}. If you are comfortable with +manipulating Lisp lists, you can set @code{mail-aliases} directly. The +initial value of @code{mail-aliases} is @code{t}, which means that +Emacs should read @file{.mailrc} to get the proper value. + +@vindex mail-personal-alias-file + You can specify a different file name to use instead of +@file{~/.mailrc} by setting the variable +@code{mail-personal-alias-file}. + +@findex expand-mail-aliases + Normally, Emacs expands aliases when you send the message. You do not +need to expand mail aliases before sending the message, but you can +expand them if you want to see where the mail will actually go. To do +this, use the command @kbd{M-x expand-mail-aliases}; it expands all mail +aliases currently present in the mail headers that hold addresses. + + If you like, you can have mail aliases expand as abbrevs, as soon as +you type them in (@pxref{Abbrevs}). To enable this feature, execute the +following: + +@example +(add-hook 'mail-mode-hook 'mail-abbrevs-setup) +@end example + +@noindent +@findex define-mail-abbrev +@vindex mail-abbrevs +This can go in your @file{.emacs} file. @xref{Hooks}. If you use this +feature, you must use @code{define-mail-abbrev} instead of +@code{define-mail-alias}; the latter does not work with this package. +Note that the mail abbreviation package uses the variable +@code{mail-abbrevs} instead of @code{mail-aliases}, and that all alias +names are converted to lower case. + +@kindex C-c C-a @r{(Mail mode)} +@findex mail-interactive-insert-alias + The mail abbreviation package also provides the @kbd{C-c C-a} +(@code{mail-interactive-insert-alias}) command, which reads an alias +name (with completion) and inserts its definition at point. This is +useful when editing the message text itself or a header field such as +@samp{Subject} in which Emacs does not normally expand aliases. + + Note that abbrevs expand only if you insert a word-separator character +afterward. However, you can rebind @kbd{C-n} and @kbd{M->} to cause +expansion as well. Here's how to do that: + +@smallexample +(add-hook 'mail-mode-hook + (lambda () + (define-key + mail-mode-map [remap next-line] 'mail-abbrev-next-line) + (define-key + mail-mode-map [remap end-of-buffer] 'mail-abbrev-end-of-buffer))) +@end smallexample + +@node Mail Mode +@section Mail Mode +@cindex Mail mode +@cindex mode, Mail + + The major mode used in the mail buffer is Mail mode, which is much +like Text mode except that various special commands are provided on the +@kbd{C-c} prefix. These commands all have to do specifically with +editing or sending the message. In addition, Mail mode defines the +character @samp{%} as a word separator; this is helpful for using the +word commands to edit mail addresses. + + Mail mode is normally used in buffers set up automatically by the +@code{mail} command and related commands. However, you can also switch +to Mail mode in a file-visiting buffer. This is a useful thing to do if +you have saved the text of a draft message in a file. + +@menu +* Mail Sending:: Commands to send the message. +* Header Editing:: Commands to move to header fields and edit them. +* Citing Mail:: Copying all or part of a message you are replying to. +* Mail Mode Misc:: Spell checking, signatures, etc. +@end menu + +@node Mail Sending +@subsection Mail Sending + + Mail mode has two commands for sending the message you have been +editing: + +@table @kbd +@item C-c C-s +Send the message, and leave the mail buffer selected (@code{mail-send}). +@item C-c C-c +Send the message, and select some other buffer (@code{mail-send-and-exit}). +@end table + +@kindex C-c C-s @r{(Mail mode)} +@kindex C-c C-c @r{(Mail mode)} +@findex mail-send +@findex mail-send-and-exit + @kbd{C-c C-s} (@code{mail-send}) sends the message and marks the mail +buffer unmodified, but leaves that buffer selected so that you can +modify the message (perhaps with new recipients) and send it again. +@kbd{C-c C-c} (@code{mail-send-and-exit}) sends and then deletes the +window or switches to another buffer. It puts the mail buffer at the +lowest priority for reselection by default, since you are finished with +using it. This is the usual way to send the message. + + In a file-visiting buffer, sending the message does not clear the +modified flag, because only saving the file should do that. Also, you +don't get a warning if you try to send the same message twice. + +@c This is indexed in mule.texi, node "Recognize Coding". +@c @vindex sendmail-coding-system + When you send a message that contains non-@acronym{ASCII} characters, they need +to be encoded with a coding system (@pxref{Coding Systems}). Usually +the coding system is specified automatically by your chosen language +environment (@pxref{Language Environments}). You can explicitly specify +the coding system for outgoing mail by setting the variable +@code{sendmail-coding-system} (@pxref{Recognize Coding}). + + If the coding system thus determined does not handle the characters in +a particular message, Emacs asks you to select the coding system to use, +showing a list of possible coding systems. + +@cindex SMTP +@cindex Feedmail +@cindex Sendmail +@vindex send-mail-function + The variable @code{send-mail-function} controls how the default mail +user agent sends mail. It should be set to a function. The default +is @code{sendmail-send-it}, which delivers mail using the Sendmail +installation on the local host. To send mail through a SMTP server, +set it to @code{smtpmail-send-it} and set up the Emacs SMTP library +(@pxref{Top,,Emacs SMTP Library, smtpmail, Sending mail via SMTP}). A +third option is @code{feedmail-send-it}, see the commentary section of +the @file{feedmail.el} package for more information. + +@node Header Editing +@subsection Mail Header Editing + + Mail mode provides special commands to move to particular header +fields and to complete addresses in headers. + +@table @kbd +@item C-c C-f C-t +Move to the @samp{To} header field, creating one if there is none +(@code{mail-to}). +@item C-c C-f C-s +Move to the @samp{Subject} header field, creating one if there is +none (@code{mail-subject}). +@item C-c C-f C-c +Move to the @samp{CC} header field, creating one if there is none +(@code{mail-cc}). +@item C-c C-f C-b +Move to the @samp{BCC} header field, creating one if there is none +(@code{mail-bcc}). +@item C-c C-f C-f +Move to the @samp{FCC} header field, creating one if there is none +(@code{mail-fcc}). +@item M-@key{TAB} +Complete a mailing address (@code{mail-complete}). +@end table + +@kindex C-c C-f C-t @r{(Mail mode)} +@findex mail-to +@kindex C-c C-f C-s @r{(Mail mode)} +@findex mail-subject +@kindex C-c C-f C-c @r{(Mail mode)} +@findex mail-cc +@kindex C-c C-f C-b @r{(Mail mode)} +@findex mail-bcc +@kindex C-c C-f C-f @r{(Mail mode)} +@findex mail-fcc + There are five commands to move point to particular header fields, all +based on the prefix @kbd{C-c C-f} (@samp{C-f} is for ``field''). They +are listed in the table above. If the field in question does not exist, +these commands create one. We provide special motion commands for these +particular fields because they are the fields users most often want to +edit. + +@findex mail-complete +@kindex M-TAB @r{(Mail mode)} + While editing a header field that contains mailing addresses, such +as @samp{To:}, @samp{CC:} and @samp{BCC:}, you can complete a mailing +address by typing @kbd{M-@key{TAB}} (@code{mail-complete}). It +inserts the full name corresponding to the address, if it can +determine the full name. The variable @code{mail-complete-style} +controls whether to insert the full name, and what style to use, as in +@code{mail-from-style} (@pxref{Mail Headers}). (If your window +manager defines @kbd{M-@key{TAB}} to switch windows, you can type +@kbd{@key{ESC} @key{TAB}} or @kbd{C-M-i}.) + + For completion purposes, the valid mailing addresses are taken to be +the local users' names plus your personal mail aliases. You can +specify additional sources of valid addresses; see the customization +group @samp{mailalias} to see the variables for customizing this +feature (@pxref{Customization Groups}). + + If you type @kbd{M-@key{TAB}} in the body of the message, +@code{mail-complete} invokes @code{ispell-complete-word}, as in Text +mode. + +@node Citing Mail +@subsection Citing Mail +@cindex citing mail + + Mail mode also has commands for yanking or @dfn{citing} all or part of +a message that you are replying to. These commands are active only when +you started sending a message using an Rmail command. + +@table @kbd +@item C-c C-y +Yank the selected message from Rmail (@code{mail-yank-original}). +@item C-c C-r +Yank the region from the Rmail buffer (@code{mail-yank-region}). +@item C-c C-q +Fill each paragraph cited from another message +(@code{mail-fill-yanked-message}). +@end table + +@kindex C-c C-y @r{(Mail mode)} +@findex mail-yank-original + When mail sending is invoked from the Rmail mail reader using an Rmail +command, @kbd{C-c C-y} can be used inside the mail buffer to insert +the text of the message you are replying to. Normally it indents each line +of that message three spaces and eliminates most header fields. A numeric +argument specifies the number of spaces to indent. An argument of just +@kbd{C-u} says not to indent at all and not to eliminate anything. +@kbd{C-c C-y} always uses the current message from the Rmail buffer, +so you can insert several old messages by selecting one in Rmail, +switching to @samp{*mail*} and yanking it, then switching back to +Rmail to select another. + +@vindex mail-yank-prefix + You can specify the text for @kbd{C-c C-y} to insert at the beginning +of each line: set @code{mail-yank-prefix} to the desired string. (A +value of @code{nil} means to use indentation; this is the default.) +However, @kbd{C-u C-c C-y} never adds anything at the beginning of the +inserted lines, regardless of the value of @code{mail-yank-prefix}. + +@kindex C-c C-r @r{(Mail mode)} +@findex mail-yank-region + To yank just a part of an incoming message, set the region in Rmail to +the part you want; then go to the @samp{*Mail*} message and type +@kbd{C-c C-r} (@code{mail-yank-region}). Each line that is copied is +indented or prefixed according to @code{mail-yank-prefix}. + +@kindex C-c C-q @r{(Mail mode)} +@findex mail-fill-yanked-message + After using @kbd{C-c C-y} or @kbd{C-c C-r}, you can type @kbd{C-c C-q} +(@code{mail-fill-yanked-message}) to fill the paragraphs of the yanked +old message or messages. One use of @kbd{C-c C-q} fills all such +paragraphs, each one individually. To fill a single paragraph of the +quoted message, use @kbd{M-q}. If filling does not automatically +handle the type of citation prefix you use, try setting the fill prefix +explicitly. @xref{Filling}. + +@node Mail Mode Misc +@subsection Mail Mode Miscellany + +@table @kbd +@item C-c C-t +Move to the beginning of the message body text (@code{mail-text}). +@item C-c C-w +Insert the file @file{~/.signature} at the end of the message text +(@code{mail-signature}). +@item C-c C-i @var{file} @key{RET} +Insert the contents of @var{file} at the end of the outgoing message +(@code{mail-attach-file}). +@item M-x ispell-message +Perform spelling correction on the message text, but not on citations from +other messages. +@end table + +@kindex C-c C-t @r{(Mail mode)} +@findex mail-text + @kbd{C-c C-t} (@code{mail-text}) moves point to just after the header +separator line---that is, to the beginning of the message body text. + +@kindex C-c C-w @r{(Mail mode)} +@findex mail-signature +@vindex mail-signature + @kbd{C-c C-w} (@code{mail-signature}) adds a standard piece of text at +the end of the message to say more about who you are. The text comes +from the file @file{~/.signature} in your home directory. To insert +your signature automatically, set the variable @code{mail-signature} to +@code{t}; after that, starting a mail message automatically inserts the +contents of your @file{~/.signature} file. If you want to omit your +signature from a particular message, delete it from the buffer before +you send the message. + + You can also set @code{mail-signature} to a string; then that string +is inserted automatically as your signature when you start editing a +message to send. If you set it to some other Lisp expression, the +expression is evaluated each time, and its value (which should be a +string) specifies the signature. + +@findex ispell-message + You can do spelling correction on the message text you have written +with the command @kbd{M-x ispell-message}. If you have yanked an +incoming message into the outgoing draft, this command skips what was +yanked, but it checks the text that you yourself inserted. (It looks +for indentation or @code{mail-yank-prefix} to distinguish the cited +lines from your input.) @xref{Spelling}. + +@kindex C-c C-i @r{(Mail mode)} +@findex mail-attach-file + To include a file in the outgoing message, you can use @kbd{C-x i}, +the usual command to insert a file in the current buffer. But it is +often more convenient to use a special command, @kbd{C-c C-i} +(@code{mail-attach-file}). This command inserts the file contents at +the end of the buffer, after your signature if any, with a delimiter +line that includes the file name. Note that this is not a MIME +attachment. + +@vindex mail-mode-hook +@vindex mail-setup-hook + Turning on Mail mode (which @kbd{C-x m} does automatically) runs the +normal hooks @code{text-mode-hook} and @code{mail-mode-hook}. +Initializing a new outgoing message runs the normal hook +@code{mail-setup-hook}; if you want to add special fields to your mail +header or make other changes to the appearance of the mail buffer, use +that hook. @xref{Hooks}. + + The main difference between these hooks is just when they are +invoked. Whenever you type @kbd{M-x mail}, @code{mail-mode-hook} runs +as soon as the @samp{*mail*} buffer is created. Then the +@code{mail-setup} function inserts the default contents of the buffer. +After these default contents are inserted, @code{mail-setup-hook} runs. + +@node Mail Amusements +@section Mail Amusements + +@findex spook +@cindex NSA + @kbd{M-x spook} adds a line of randomly chosen keywords to an outgoing +mail message. The keywords are chosen from a list of words that suggest +you are discussing something subversive. + + The idea behind this feature is the suspicion that the +NSA@footnote{The US National Security Agency.} snoops on +all electronic mail messages that contain keywords suggesting they might +find them interesting. (The NSA says they don't, but that's what they +@emph{would} say.) The idea is that if lots of people add suspicious +words to their messages, the NSA will get so busy with spurious input +that they will have to give up reading it all. + + Here's how to insert spook keywords automatically whenever you start +entering an outgoing message: + +@example +(add-hook 'mail-setup-hook 'spook) +@end example + + Whether or not this confuses the NSA, it at least amuses people. + +@findex fortune-to-signature +@cindex fortune cookies + You can use the @code{fortune} program to put a ``fortune cookie'' +message into outgoing mail. To do this, add +@code{fortune-to-signature} to @code{mail-setup-hook}: + +@example +(add-hook 'mail-setup-hook 'fortune-to-signature) +@end example + +@node Mail Methods +@section Mail-Composition Methods +@cindex mail-composition methods + +@cindex MH mail interface +@cindex Message mode for sending mail + In this chapter we have described the usual Emacs mode for editing +and sending mail---Mail mode. Emacs has alternative facilities for +editing and sending mail, including +MH-E and Message mode, not documented in this manual. +@xref{Top,,MH-E,mh-e, The Emacs Interface to MH}. @xref{Top,,Message,message, +Message Manual}. You can choose any of them as your preferred method. +The commands @code{C-x m}, @code{C-x 4 m} and @code{C-x 5 m} use +whichever agent you have specified, as do various other Emacs commands +and facilities that send mail. + +@vindex mail-user-agent + To specify your mail-composition method, customize the variable +@code{mail-user-agent}. Currently legitimate values include +@code{sendmail-user-agent} (Mail mode), @code{mh-e-user-agent}, +@code{message-user-agent} and @code{gnus-user-agent}. + + If you select a different mail-composition method, the information +in this chapter about the @samp{*mail*} buffer and Mail mode does not +apply; the other methods use a different format of text in a different +buffer, and their commands are different as well. + +@ignore + arch-tag: d8a3dfc3-5d87-45c5-a7f2-69871b8e4fd6 +@end ignore diff --git a/doc/emacs/text.texi b/doc/emacs/text.texi new file mode 100644 index 00000000000..3a0e091ea40 --- /dev/null +++ b/doc/emacs/text.texi @@ -0,0 +1,2901 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Text, Programs, Indentation, Top +@chapter Commands for Human Languages +@cindex text +@cindex manipulating text + + The term @dfn{text} has two widespread meanings in our area of the +computer field. One is data that is a sequence of characters. Any file +that you edit with Emacs is text, in this sense of the word. The other +meaning is more restrictive: a sequence of characters in a human language +for humans to read (possibly after processing by a text formatter), as +opposed to a program or binary data. This chapter is concerned with +editing text in the narrower sense. + + Human languages have syntactic/stylistic conventions that can be +supported or used to advantage by editor commands: conventions involving +words, sentences, paragraphs, and capital letters. This chapter +describes Emacs commands for all of these things. There are also +commands for @dfn{filling}, which means rearranging the lines of a +paragraph to be approximately equal in length. The commands for moving +over and killing words, sentences and paragraphs, while intended +primarily for editing text, are also often useful for editing programs. + + Emacs has several major modes for editing human-language text. If the +file contains text pure and simple, use Text mode, which customizes +Emacs in small ways for the syntactic conventions of text. Outline mode +provides special commands for operating on text with an outline +structure. +@iftex +@xref{Outline Mode}. +@end iftex + + For text which contains embedded commands for text formatters, Emacs +has other major modes, each for a particular formatter. Thus, for +input to @TeX{}, you would use @TeX{} +@iftex +mode (@pxref{TeX Mode,,@TeX{} Mode}). +@end iftex +@ifnottex +mode. +@end ifnottex +For input to groff or nroff, use Nroff mode. + + Instead of using a text formatter, you can edit formatted text in +WYSIWYG style (``what you see is what you get''), with Enriched mode. +Then the formatting appears on the screen in Emacs while you edit. +@iftex +@xref{Formatted Text}. +@end iftex + +@cindex ASCII art + If you need to edit pictures made out of text characters (commonly +referred to as ``ASCII art''), use @kbd{M-x edit-picture} to enter +Picture mode, a special major mode for editing such pictures. +@iftex +@xref{Picture Mode,,, emacs-xtra, Specialized Emacs Features}. +@end iftex +@ifnottex +@xref{Picture Mode}. +@end ifnottex + + +@cindex skeletons +@cindex templates +@cindex autotyping +@cindex automatic typing + The ``automatic typing'' features may be useful when writing text. +@inforef{Top,, autotype}. + +@menu +* Words:: Moving over and killing words. +* Sentences:: Moving over and killing sentences. +* Paragraphs:: Moving over paragraphs. +* Pages:: Moving over pages. +* Filling:: Filling or justifying text. +* Case:: Changing the case of text. +* Text Mode:: The major modes for editing text files. +* Outline Mode:: Editing outlines. +* TeX Mode:: Editing input to the formatter TeX. +* HTML Mode:: Editing HTML, SGML, and XML files. +* Nroff Mode:: Editing input to the formatter nroff. +* Formatted Text:: Editing formatted text directly in WYSIWYG fashion. +* Text Based Tables:: Editing text-based tables in WYSIWYG fashion. +@end menu + +@node Words +@section Words +@cindex words +@cindex Meta commands and words + + Emacs has commands for moving over or operating on words. By convention, +the keys for them are all Meta characters. + +@table @kbd +@item M-f +Move forward over a word (@code{forward-word}). +@item M-b +Move backward over a word (@code{backward-word}). +@item M-d +Kill up to the end of a word (@code{kill-word}). +@item M-@key{DEL} +Kill back to the beginning of a word (@code{backward-kill-word}). +@item M-@@ +Mark the end of the next word (@code{mark-word}). +@item M-t +Transpose two words or drag a word across others +(@code{transpose-words}). +@end table + + Notice how these keys form a series that parallels the character-based +@kbd{C-f}, @kbd{C-b}, @kbd{C-d}, @key{DEL} and @kbd{C-t}. @kbd{M-@@} is +cognate to @kbd{C-@@}, which is an alias for @kbd{C-@key{SPC}}. + +@kindex M-f +@kindex M-b +@findex forward-word +@findex backward-word + The commands @kbd{M-f} (@code{forward-word}) and @kbd{M-b} +(@code{backward-word}) move forward and backward over words. These +Meta characters are thus analogous to the corresponding control +characters, @kbd{C-f} and @kbd{C-b}, which move over single characters +in the text. The analogy extends to numeric arguments, which serve as +repeat counts. @kbd{M-f} with a negative argument moves backward, and +@kbd{M-b} with a negative argument moves forward. Forward motion +stops right after the last letter of the word, while backward motion +stops right before the first letter. + +@kindex M-d +@findex kill-word + @kbd{M-d} (@code{kill-word}) kills the word after point. To be +precise, it kills everything from point to the place @kbd{M-f} would +move to. Thus, if point is in the middle of a word, @kbd{M-d} kills +just the part after point. If some punctuation comes between point and the +next word, it is killed along with the word. (If you wish to kill only the +next word but not the punctuation before it, simply do @kbd{M-f} to get +the end, and kill the word backwards with @kbd{M-@key{DEL}}.) +@kbd{M-d} takes arguments just like @kbd{M-f}. + +@findex backward-kill-word +@kindex M-DEL + @kbd{M-@key{DEL}} (@code{backward-kill-word}) kills the word before +point. It kills everything from point back to where @kbd{M-b} would +move to. For instance, if point is after the space in @w{@samp{FOO, +BAR}}, it kills @w{@samp{FOO, }}. If you wish to kill just +@samp{FOO}, and not the comma and the space, use @kbd{M-b M-d} instead +of @kbd{M-@key{DEL}}. + +@c Don't index M-t and transpose-words here, they are indexed in +@c fixit.texi, in the node "Transpose". +@c @kindex M-t +@c @findex transpose-words + @kbd{M-t} (@code{transpose-words}) exchanges the word before or +containing point with the following word. The delimiter characters between +the words do not move. For example, @w{@samp{FOO, BAR}} transposes into +@w{@samp{BAR, FOO}} rather than @samp{@w{BAR FOO,}}. @xref{Transpose}, for +more on transposition. + +@kindex M-@@ +@findex mark-word + To operate on the next @var{n} words with an operation which applies +between point and mark, you can either set the mark at point and then move +over the words, or you can use the command @kbd{M-@@} (@code{mark-word}) +which does not move point, but sets the mark where @kbd{M-f} would move +to. @kbd{M-@@} accepts a numeric argument that says how many words to +scan for the place to put the mark. In Transient Mark mode, this command +activates the mark. + + The word commands' understanding of word boundaries is controlled +by the syntax table. Any character can, for example, be declared to +be a word delimiter. @xref{Syntax}. + +@node Sentences +@section Sentences +@cindex sentences +@cindex manipulating sentences + + The Emacs commands for manipulating sentences and paragraphs are mostly +on Meta keys, so as to be like the word-handling commands. + +@table @kbd +@item M-a +Move back to the beginning of the sentence (@code{backward-sentence}). +@item M-e +Move forward to the end of the sentence (@code{forward-sentence}). +@item M-k +Kill forward to the end of the sentence (@code{kill-sentence}). +@item C-x @key{DEL} +Kill back to the beginning of the sentence (@code{backward-kill-sentence}). +@end table + +@kindex M-a +@kindex M-e +@findex backward-sentence +@findex forward-sentence + The commands @kbd{M-a} and @kbd{M-e} (@code{backward-sentence} and +@code{forward-sentence}) move to the beginning and end of the current +sentence, respectively. They were chosen to resemble @kbd{C-a} and +@kbd{C-e}, which move to the beginning and end of a line. Unlike +them, @kbd{M-a} and @kbd{M-e} move over successive sentences if +repeated. + + Moving backward over a sentence places point just before the first +character of the sentence; moving forward places point right after the +punctuation that ends the sentence. Neither one moves over the +whitespace at the sentence boundary. + +@kindex M-k +@kindex C-x DEL +@findex kill-sentence +@findex backward-kill-sentence + Just as @kbd{C-a} and @kbd{C-e} have a kill command, @kbd{C-k}, to go +with them, so @kbd{M-a} and @kbd{M-e} have a corresponding kill command +@kbd{M-k} (@code{kill-sentence}) which kills from point to the end of +the sentence. With minus one as an argument it kills back to the +beginning of the sentence. Larger arguments serve as a repeat count. +There is also a command, @kbd{C-x @key{DEL}} +(@code{backward-kill-sentence}), for killing back to the beginning of a +sentence. This command is useful when you change your mind in the +middle of composing text. + + The sentence commands assume that you follow the American typist's +convention of putting two spaces at the end of a sentence; they consider +a sentence to end wherever there is a @samp{.}, @samp{?} or @samp{!} +followed by the end of a line or two spaces, with any number of +@samp{)}, @samp{]}, @samp{'}, or @samp{"} characters allowed in between. +A sentence also begins or ends wherever a paragraph begins or ends. +It is useful to follow this convention, because it makes a distinction +between periods that end a sentence and periods that indicate +abbreviations; that enables the Emacs sentence commands to distinguish, +too. These commands do not stop for periods that indicate abbreviations. + +@vindex sentence-end-double-space + If you want to use just one space between sentences, you can set the +variable @code{sentence-end-double-space} to @code{nil} to make the +sentence commands stop for single spaces. However, this mode has a +drawback: there is no way to distinguish between periods that end +sentences and those that indicate abbreviations. For convenient and +reliable editing, we therefore recommend you follow the two-space +convention. The variable @code{sentence-end-double-space} also +affects filling (@pxref{Fill Commands}) in related ways. + +@vindex sentence-end + The variable @code{sentence-end} controls how to recognize the end +of a sentence. If non-@code{nil}, it is a regexp that matches the +last few characters of a sentence, together with the whitespace +following the sentence. If the value is @code{nil}, the default, then +Emacs computes the regexp according to various criteria such as the +value of @code{sentence-end-double-space}. @xref{Regexp Example}, for +a detailed explanation of one of the regular expressions Emacs uses +for this purpose. + +@vindex sentence-end-without-period + Some languages do not use periods to indicate the end of a sentence. +For example, sentences in Thai end with a double space but without a +period. Set the variable @code{sentence-end-without-period} to +@code{t} in such cases. + +@node Paragraphs +@section Paragraphs +@cindex paragraphs +@cindex manipulating paragraphs +@kindex M-@{ +@kindex M-@} +@findex backward-paragraph +@findex forward-paragraph + + The Emacs commands for manipulating paragraphs are also on Meta keys. + +@table @kbd +@item M-@{ +Move back to previous paragraph beginning (@code{backward-paragraph}). +@item M-@} +Move forward to next paragraph end (@code{forward-paragraph}). +@item M-h +Put point and mark around this or next paragraph (@code{mark-paragraph}). +@end table + + @kbd{M-@{} moves to the beginning of the current or previous +paragraph, while @kbd{M-@}} moves to the end of the current or next +paragraph. Blank lines and text-formatter command lines separate +paragraphs and are not considered part of any paragraph. If there is +a blank line before the paragraph, @kbd{M-@{} moves to the blank line, +because that is convenient in practice. + + In Text mode, an indented line is not a paragraph break. If you +want indented lines to have this effect, use Paragraph-Indent Text +mode instead. @xref{Text Mode}. + + In major modes for programs, paragraphs begin and end only at blank +lines. This makes the paragraph commands useful, even though there +are no paragraphs as such in a program. + + When you have set a fill prefix, then paragraphs are delimited by +all lines which don't start with the fill prefix. @xref{Filling}. + +@kindex M-h +@findex mark-paragraph + When you wish to operate on a paragraph, you can use the command +@kbd{M-h} (@code{mark-paragraph}) to set the region around it. Thus, +for example, @kbd{M-h C-w} kills the paragraph around or after point. +The @kbd{M-h} command puts point at the beginning and mark at the end of +the paragraph point was in. In Transient Mark mode, it activates the +mark. If point is between paragraphs (in a run of blank lines, or at a +boundary), the paragraph following point is surrounded by point and +mark. If there are blank lines preceding the first line of the +paragraph, one of these blank lines is included in the region. + +@vindex paragraph-start +@vindex paragraph-separate + The precise definition of a paragraph boundary is controlled by the +variables @code{paragraph-separate} and @code{paragraph-start}. The +value of @code{paragraph-start} is a regexp that should match any line +that either starts or separates paragraphs. The value of +@code{paragraph-separate} is another regexp that should match only lines +that separate paragraphs without being part of any paragraph (for +example, blank lines). Lines that start a new paragraph and are +contained in it must match only @code{paragraph-start}, not +@code{paragraph-separate}. Each regular expression must match at the +left margin. For example, in Fundamental mode, @code{paragraph-start} +is @w{@code{"\f\\|[ \t]*$"}}, and @code{paragraph-separate} is +@w{@code{"[ \t\f]*$"}}. + + Normally it is desirable for page boundaries to separate paragraphs. +The default values of these variables recognize the usual separator for +pages. + +@node Pages +@section Pages + +@cindex pages +@cindex formfeed + Files are often thought of as divided into @dfn{pages} by the +@dfn{formfeed} character (@acronym{ASCII} control-L, octal code 014). +When you print hardcopy for a file, this character forces a page break; +thus, each page of the file goes on a separate page on paper. Most Emacs +commands treat the page-separator character just like any other +character: you can insert it with @kbd{C-q C-l}, and delete it with +@key{DEL}. Thus, you are free to paginate your file or not. However, +since pages are often meaningful divisions of the file, Emacs provides +commands to move over them and operate on them. + +@table @kbd +@item C-x [ +Move point to previous page boundary (@code{backward-page}). +@item C-x ] +Move point to next page boundary (@code{forward-page}). +@item C-x C-p +Put point and mark around this page (or another page) (@code{mark-page}). +@item C-x l +Count the lines in this page (@code{count-lines-page}). +@end table + +@kindex C-x [ +@kindex C-x ] +@findex forward-page +@findex backward-page + The @kbd{C-x [} (@code{backward-page}) command moves point to immediately +after the previous page delimiter. If point is already right after a page +delimiter, it skips that one and stops at the previous one. A numeric +argument serves as a repeat count. The @kbd{C-x ]} (@code{forward-page}) +command moves forward past the next page delimiter. + +@kindex C-x C-p +@findex mark-page + The @kbd{C-x C-p} command (@code{mark-page}) puts point at the +beginning of the current page and the mark at the end. The page +delimiter at the end is included (the mark follows it). The page +delimiter at the front is excluded (point follows it). In Transient +Mark mode, this command activates the mark. + + @kbd{C-x C-p C-w} is a handy way to kill a page to move it +elsewhere. If you move to another page delimiter with @kbd{C-x [} and +@kbd{C-x ]}, then yank the killed page, all the pages will be properly +delimited once again. The reason @kbd{C-x C-p} includes only the +following page delimiter in the region is to ensure that. + + A numeric argument to @kbd{C-x C-p} is used to specify which page to go +to, relative to the current one. Zero means the current page. One means +the next page, and @minus{}1 means the previous one. + +@kindex C-x l +@findex count-lines-page + The @kbd{C-x l} command (@code{count-lines-page}) is good for deciding +where to break a page in two. It displays in the echo area the total number +of lines in the current page, and then divides it up into those preceding +the current line and those following, as in + +@example +Page has 96 (72+25) lines +@end example + +@noindent + Notice that the sum is off by one; this is correct if point is not at the +beginning of a line. + +@vindex page-delimiter + The variable @code{page-delimiter} controls where pages begin. Its +value is a regexp that matches the beginning of a line that separates +pages. The normal value of this variable is @code{"^\f"}, which +matches a formfeed character at the beginning of a line. + +@node Filling +@section Filling Text +@cindex filling text + + @dfn{Filling} text means breaking it up into lines that fit a +specified width. Emacs does filling in two ways. In Auto Fill mode, +inserting text with self-inserting characters also automatically fills +it. There are also explicit fill commands that you can use when editing +text leaves it unfilled. When you edit formatted text, you can specify +a style of filling for each portion of the text (@pxref{Formatted +Text}). + +@menu +* Auto Fill:: Auto Fill mode breaks long lines automatically. +* Fill Commands:: Commands to refill paragraphs and center lines. +* Fill Prefix:: Filling paragraphs that are indented + or in a comment, etc. +* Adaptive Fill:: How Emacs can determine the fill prefix automatically. +* Refill:: Keeping paragraphs filled. +* Longlines:: Editing text with very long lines. +@end menu + +@node Auto Fill +@subsection Auto Fill Mode +@cindex Auto Fill mode +@cindex mode, Auto Fill + + @dfn{Auto Fill} mode is a minor mode in which lines are broken +automatically when they become too wide. Breaking happens only when +you type a @key{SPC} or @key{RET}. + +@table @kbd +@item M-x auto-fill-mode +Enable or disable Auto Fill mode. +@item @key{SPC} +@itemx @key{RET} +In Auto Fill mode, break lines when appropriate. +@end table + +@findex auto-fill-mode + @kbd{M-x auto-fill-mode} turns Auto Fill mode on if it was off, or off +if it was on. With a positive numeric argument it always turns Auto +Fill mode on, and with a negative argument always turns it off. You can +see when Auto Fill mode is in effect by the presence of the word +@samp{Fill} in the mode line, inside the parentheses. Auto Fill mode is +a minor mode which is enabled or disabled for each buffer individually. +@xref{Minor Modes}. + + In Auto Fill mode, lines are broken automatically at spaces when they +get longer than the desired width. Line breaking and rearrangement +takes place only when you type @key{SPC} or @key{RET}. If you wish to +insert a space or newline without permitting line-breaking, type +@kbd{C-q @key{SPC}} or @kbd{C-q C-j} (recall that a newline is really a +control-J). Also, @kbd{C-o} inserts a newline without line breaking. + + Auto Fill mode works well with programming-language modes, because it +indents new lines with @key{TAB}. If a line ending in a comment gets +too long, the text of the comment is split into two comment lines. +Optionally, new comment delimiters are inserted at the end of the first +line and the beginning of the second so that each line is a separate +comment; the variable @code{comment-multi-line} controls the choice +(@pxref{Comments}). + + Adaptive filling (@pxref{Adaptive Fill}) works for Auto Filling as +well as for explicit fill commands. It takes a fill prefix +automatically from the second or first line of a paragraph. + + Auto Fill mode does not refill entire paragraphs; it can break lines but +cannot merge lines. So editing in the middle of a paragraph can result in +a paragraph that is not correctly filled. The easiest way to make the +paragraph properly filled again is usually with the explicit fill commands. +@ifnottex +@xref{Fill Commands}. +@end ifnottex + + Many users like Auto Fill mode and want to use it in all text files. +The section on init files says how to arrange this permanently for yourself. +@xref{Init File}. + +@node Fill Commands +@subsection Explicit Fill Commands + +@table @kbd +@item M-q +Fill current paragraph (@code{fill-paragraph}). +@item C-x f +Set the fill column (@code{set-fill-column}). +@item M-x fill-region +Fill each paragraph in the region (@code{fill-region}). +@item M-x fill-region-as-paragraph +Fill the region, considering it as one paragraph. +@item M-s +Center a line. +@end table + +@kindex M-q +@findex fill-paragraph + To refill a paragraph, use the command @kbd{M-q} +(@code{fill-paragraph}). This operates on the paragraph that point is +inside, or the one after point if point is between paragraphs. +Refilling works by removing all the line-breaks, then inserting new ones +where necessary. + +@findex fill-region + To refill many paragraphs, use @kbd{M-x fill-region}, which +finds the paragraphs in the region and fills each of them. + +@findex fill-region-as-paragraph + @kbd{M-q} and @code{fill-region} use the same criteria as @kbd{M-h} +for finding paragraph boundaries (@pxref{Paragraphs}). For more +control, you can use @kbd{M-x fill-region-as-paragraph}, which refills +everything between point and mark as a single paragraph. This command +deletes any blank lines within the region, so separate blocks of text +end up combined into one block. + +@cindex justification + A numeric argument to @kbd{M-q} tells it to @dfn{justify} the text +as well as filling it. This means that extra spaces are inserted to +make the right margin line up exactly at the fill column. To remove +the extra spaces, use @kbd{M-q} with no argument. (Likewise for +@code{fill-region}.) Another way to control justification, and choose +other styles of filling, is with the @code{justification} text +property; see @ref{Format Justification}. + +@kindex M-s @r{(Text mode)} +@cindex centering +@findex center-line + The command @kbd{M-s} (@code{center-line}) centers the current line +within the current fill column. With an argument @var{n}, it centers +@var{n} lines individually and moves past them. This binding is +made by Text mode and is available only in that and related modes +(@pxref{Text Mode}). + +@vindex fill-column +@kindex C-x f +@findex set-fill-column + The maximum line width for filling is in the variable +@code{fill-column}. Altering the value of @code{fill-column} makes it +local to the current buffer; until that time, the default value is in +effect. The default is initially 70. @xref{Locals}. The easiest way +to set @code{fill-column} is to use the command @kbd{C-x f} +(@code{set-fill-column}). With a numeric argument, it uses that as the +new fill column. With just @kbd{C-u} as argument, it sets +@code{fill-column} to the current horizontal position of point. + + Emacs commands normally consider a period followed by two spaces or by +a newline as the end of a sentence; a period followed by just one space +indicates an abbreviation and not the end of a sentence. To preserve +the distinction between these two ways of using a period, the fill +commands do not break a line after a period followed by just one space. + + If the variable @code{sentence-end-double-space} is @code{nil}, the +fill commands expect and leave just one space at the end of a sentence. +Ordinarily this variable is @code{t}, so the fill commands insist on +two spaces for the end of a sentence, as explained above. @xref{Sentences}. + +@vindex colon-double-space + If the variable @code{colon-double-space} is non-@code{nil}, the +fill commands put two spaces after a colon. + +@vindex fill-nobreak-predicate + The variable @code{fill-nobreak-predicate} is a hook (an abnormal +hook, @pxref{Hooks}) specifying additional conditions where +line-breaking is not allowed. Each function is called with no +arguments, with point at a place where Emacs is considering breaking +the line. If a function returns a non-@code{nil} value, then that's +a bad place to break the line. Two standard functions you can use are +@code{fill-single-word-nobreak-p} (don't break after the first word of +a sentence or before the last) and @code{fill-french-nobreak-p} (don't +break after @samp{(} or before @samp{)}, @samp{:} or @samp{?}). + +@node Fill Prefix +@subsection The Fill Prefix + +@cindex fill prefix + To fill a paragraph in which each line starts with a special marker +(which might be a few spaces, giving an indented paragraph), you can use +the @dfn{fill prefix} feature. The fill prefix is a string that Emacs +expects every line to start with, and which is not included in filling. +You can specify a fill prefix explicitly; Emacs can also deduce the +fill prefix automatically (@pxref{Adaptive Fill}). + +@table @kbd +@item C-x . +Set the fill prefix (@code{set-fill-prefix}). +@item M-q +Fill a paragraph using current fill prefix (@code{fill-paragraph}). +@item M-x fill-individual-paragraphs +Fill the region, considering each change of indentation as starting a +new paragraph. +@item M-x fill-nonuniform-paragraphs +Fill the region, considering only paragraph-separator lines as starting +a new paragraph. +@end table + +@kindex C-x . +@findex set-fill-prefix + To specify a fill prefix for the current buffer, move to a line that +starts with the desired prefix, put point at the end of the prefix, +and type @w{@kbd{C-x .}}@: (@code{set-fill-prefix}). (That's a period +after the @kbd{C-x}.) To turn off the fill prefix, specify an empty +prefix: type @w{@kbd{C-x .}}@: with point at the beginning of a line. + + When a fill prefix is in effect, the fill commands remove the fill +prefix from each line of the paragraph before filling and insert it on +each line after filling. (The beginning of the first line of the +paragraph is left unchanged, since often that is intentionally +different.) Auto Fill mode also inserts the fill prefix automatically +when it makes a new line. The @kbd{C-o} command inserts the fill +prefix on new lines it creates, when you use it at the beginning of a +line (@pxref{Blank Lines}). Conversely, the command @kbd{M-^} deletes +the prefix (if it occurs) after the newline that it deletes +(@pxref{Indentation}). + + For example, if @code{fill-column} is 40 and you set the fill prefix +to @samp{;; }, then @kbd{M-q} in the following text + +@example +;; This is an +;; example of a paragraph +;; inside a Lisp-style comment. +@end example + +@noindent +produces this: + +@example +;; This is an example of a paragraph +;; inside a Lisp-style comment. +@end example + + Lines that do not start with the fill prefix are considered to start +paragraphs, both in @kbd{M-q} and the paragraph commands; this gives +good results for paragraphs with hanging indentation (every line +indented except the first one). Lines which are blank or indented once +the prefix is removed also separate or start paragraphs; this is what +you want if you are writing multi-paragraph comments with a comment +delimiter on each line. + +@findex fill-individual-paragraphs + You can use @kbd{M-x fill-individual-paragraphs} to set the fill +prefix for each paragraph automatically. This command divides the +region into paragraphs, treating every change in the amount of +indentation as the start of a new paragraph, and fills each of these +paragraphs. Thus, all the lines in one ``paragraph'' have the same +amount of indentation. That indentation serves as the fill prefix for +that paragraph. + +@findex fill-nonuniform-paragraphs + @kbd{M-x fill-nonuniform-paragraphs} is a similar command that divides +the region into paragraphs in a different way. It considers only +paragraph-separating lines (as defined by @code{paragraph-separate}) as +starting a new paragraph. Since this means that the lines of one +paragraph may have different amounts of indentation, the fill prefix +used is the smallest amount of indentation of any of the lines of the +paragraph. This gives good results with styles that indent a paragraph's +first line more or less that the rest of the paragraph. + +@vindex fill-prefix + The fill prefix is stored in the variable @code{fill-prefix}. Its value +is a string, or @code{nil} when there is no fill prefix. This is a +per-buffer variable; altering the variable affects only the current buffer, +but there is a default value which you can change as well. @xref{Locals}. + + The @code{indentation} text property provides another way to control +the amount of indentation paragraphs receive. @xref{Format Indentation}. + +@node Adaptive Fill +@subsection Adaptive Filling + +@cindex adaptive filling + The fill commands can deduce the proper fill prefix for a paragraph +automatically in certain cases: either whitespace or certain punctuation +characters at the beginning of a line are propagated to all lines of the +paragraph. + + If the paragraph has two or more lines, the fill prefix is taken from +the paragraph's second line, but only if it appears on the first line as +well. + + If a paragraph has just one line, fill commands @emph{may} take a +prefix from that line. The decision is complicated because there are +three reasonable things to do in such a case: + +@itemize @bullet +@item +Use the first line's prefix on all the lines of the paragraph. + +@item +Indent subsequent lines with whitespace, so that they line up under the +text that follows the prefix on the first line, but don't actually copy +the prefix from the first line. + +@item +Don't do anything special with the second and following lines. +@end itemize + + All three of these styles of formatting are commonly used. So the +fill commands try to determine what you would like, based on the prefix +that appears and on the major mode. Here is how. + +@vindex adaptive-fill-first-line-regexp + If the prefix found on the first line matches +@code{adaptive-fill-first-line-regexp}, or if it appears to be a +comment-starting sequence (this depends on the major mode), then the +prefix found is used for filling the paragraph, provided it would not +act as a paragraph starter on subsequent lines. + + Otherwise, the prefix found is converted to an equivalent number of +spaces, and those spaces are used as the fill prefix for the rest of the +lines, provided they would not act as a paragraph starter on subsequent +lines. + + In Text mode, and other modes where only blank lines and page +delimiters separate paragraphs, the prefix chosen by adaptive filling +never acts as a paragraph starter, so it can always be used for filling. + +@vindex adaptive-fill-mode +@vindex adaptive-fill-regexp + The variable @code{adaptive-fill-regexp} determines what kinds of line +beginnings can serve as a fill prefix: any characters at the start of +the line that match this regular expression are used. If you set the +variable @code{adaptive-fill-mode} to @code{nil}, the fill prefix is +never chosen automatically. + +@vindex adaptive-fill-function + You can specify more complex ways of choosing a fill prefix +automatically by setting the variable @code{adaptive-fill-function} to a +function. This function is called with point after the left margin of a +line, and it should return the appropriate fill prefix based on that +line. If it returns @code{nil}, @code{adaptive-fill-regexp} gets +a chance to find a prefix. + +@node Refill +@subsection Refill Mode +@cindex refilling text, word processor style +@cindex modes, Refill +@cindex Refill minor mode + + Refill minor mode provides support for keeping paragraphs filled as +you type or modify them in other ways. It provides an effect similar +to typical word processor behavior. This works by running a +paragraph-filling command at suitable times. + + To toggle the use of Refill mode in the current buffer, type +@kbd{M-x refill-mode}. When you are typing text, only characters +which normally trigger auto filling, like the space character, will +trigger refilling. This is to avoid making it too slow. Apart from +self-inserting characters, other commands which modify the text cause +refilling. + + The current implementation is preliminary and not robust. You can +get better ``line wrapping'' behavior using Longlines mode. +@xref{Longlines}. However, Longlines mode has an important +side-effect: the newlines that it inserts for you are not saved to +disk, so the files that you make with Longlines mode will appear to be +completely unfilled if you edit them without Longlines mode. + +@node Longlines +@subsection Long Lines Mode +@cindex refilling text, word processor style +@cindex modes, Long Lines +@cindex word wrap +@cindex Long Lines minor mode + + Long Lines mode is a minor mode for @dfn{word wrapping}; it lets you +edit ``unfilled'' text files, which Emacs would normally display as a +bunch of extremely long lines. Many text editors, such as those built +into many web browsers, normally do word wrapping. + +@findex longlines-mode + To enable Long Lines mode, type @kbd{M-x longlines-mode}. If the +text is full of long lines, this will ``wrap'' them +immediately---i.e., break up to fit in the window. As you edit the +text, Long Lines mode automatically re-wraps lines by inserting or +deleting @dfn{soft newlines} as necessary (@pxref{Hard and Soft +Newlines}.) These soft newlines won't show up when you save the +buffer into a file, or when you copy the text into the kill ring, +clipboard, or a register. + +@findex longlines-auto-wrap + Word wrapping is @emph{not} the same as ordinary filling +(@pxref{Fill Commands}). It does not contract multiple spaces into a +single space, recognize fill prefixes (@pxref{Fill Prefix}), or +perform adaptive filling (@pxref{Adaptive Fill}). The reason for this +is that a wrapped line is still, conceptually, a single line. Each +soft newline is equivalent to exactly one space in that long line, and +vice versa. However, you can still call filling functions such as +@kbd{M-q}, and these will work as expected, inserting soft newlines +that won't show up on disk or when the text is copied. You can even +rely entirely on the normal fill commands by turning off automatic +line wrapping, with @kbd{C-u M-x longlines-auto-wrap}. To turn +automatic line wrapping back on, type @kbd{M-x longlines-auto-wrap}. + +@findex longlines-show-hard-newlines + Type @kbd{RET} to insert a hard newline, one which automatic +refilling will not remove. If you want to see where all the hard +newlines are, type @kbd{M-x longlines-show-hard-newlines}. This will +mark each hard newline with a special symbol. The same command with a +prefix argument turns this display off. + + Long Lines mode does not change normal text files that are already +filled, since the existing newlines are considered hard newlines. +Before Long Lines can do anything, you need to transform each +paragraph into a long line. One way is to set @code{fill-column} to a +large number (e.g., @kbd{C-u 9999 C-x f}), re-fill all the paragraphs, +and then set @code{fill-column} back to its original value. + +@node Case +@section Case Conversion Commands +@cindex case conversion + + Emacs has commands for converting either a single word or any arbitrary +range of text to upper case or to lower case. + +@table @kbd +@item M-l +Convert following word to lower case (@code{downcase-word}). +@item M-u +Convert following word to upper case (@code{upcase-word}). +@item M-c +Capitalize the following word (@code{capitalize-word}). +@item C-x C-l +Convert region to lower case (@code{downcase-region}). +@item C-x C-u +Convert region to upper case (@code{upcase-region}). +@end table + +@kindex M-l +@kindex M-u +@kindex M-c +@cindex words, case conversion +@cindex converting text to upper or lower case +@cindex capitalizing words +@findex downcase-word +@findex upcase-word +@findex capitalize-word + The word conversion commands are the most useful. @kbd{M-l} +(@code{downcase-word}) converts the word after point to lower case, moving +past it. Thus, repeating @kbd{M-l} converts successive words. +@kbd{M-u} (@code{upcase-word}) converts to all capitals instead, while +@kbd{M-c} (@code{capitalize-word}) puts the first letter of the word +into upper case and the rest into lower case. All these commands convert +several words at once if given an argument. They are especially convenient +for converting a large amount of text from all upper case to mixed case, +because you can move through the text using @kbd{M-l}, @kbd{M-u} or +@kbd{M-c} on each word as appropriate, occasionally using @kbd{M-f} instead +to skip a word. + + When given a negative argument, the word case conversion commands apply +to the appropriate number of words before point, but do not move point. +This is convenient when you have just typed a word in the wrong case: you +can give the case conversion command and continue typing. + + If a word case conversion command is given in the middle of a word, +it applies only to the part of the word which follows point. (This is +comparable to what @kbd{M-d} (@code{kill-word}) does.) With a +negative argument, case conversion applies only to the part of the +word before point. + +@kindex C-x C-l +@kindex C-x C-u +@findex downcase-region +@findex upcase-region + The other case conversion commands are @kbd{C-x C-u} +(@code{upcase-region}) and @kbd{C-x C-l} (@code{downcase-region}), which +convert everything between point and mark to the specified case. Point and +mark do not move. + + The region case conversion commands @code{upcase-region} and +@code{downcase-region} are normally disabled. This means that they ask +for confirmation if you try to use them. When you confirm, you may +enable the command, which means it will not ask for confirmation again. +@xref{Disabling}. + +@node Text Mode +@section Text Mode +@cindex Text mode +@cindex mode, Text +@findex text-mode + + When you edit files of text in a human language, it's more convenient +to use Text mode rather than Fundamental mode. To enter Text mode, type +@kbd{M-x text-mode}. + + In Text mode, only blank lines and page delimiters separate +paragraphs. As a result, paragraphs can be indented, and adaptive +filling determines what indentation to use when filling a paragraph. +@xref{Adaptive Fill}. + +@kindex TAB @r{(Text mode)} + Text mode defines @key{TAB} to run @code{indent-relative} +(@pxref{Indentation}), so that you can conveniently indent a line like +the previous line. + + Text mode turns off the features concerned with comments except when +you explicitly invoke them. It changes the syntax table so that +single-quotes are considered part of words. However, if a word starts +with single-quotes, these are treated as a prefix for purposes such as +capitalization. That is, @kbd{M-c} will convert @samp{'hello'} into +@samp{'Hello'}, as expected. + +@cindex Paragraph-Indent Text mode +@cindex mode, Paragraph-Indent Text +@findex paragraph-indent-text-mode +@findex paragraph-indent-minor-mode + If you indent the first lines of paragraphs, then you should use +Paragraph-Indent Text mode rather than Text mode. In this mode, you +do not need to have blank lines between paragraphs, because the +first-line indentation is sufficient to start a paragraph; however +paragraphs in which every line is indented are not supported. Use +@kbd{M-x paragraph-indent-text-mode} to enter this mode. Use @kbd{M-x +paragraph-indent-minor-mode} to enable an equivalent minor mode in +situations where you can't change the major mode---in mail +composition, for instance. + +@kindex M-TAB @r{(Text mode)} + Text mode, and all the modes based on it, define @kbd{M-@key{TAB}} +as the command @code{ispell-complete-word}, which performs completion +of the partial word in the buffer before point, using the spelling +dictionary as the space of possible words. @xref{Spelling}. If your +window manager defines @kbd{M-@key{TAB}} to switch windows, you can +type @kbd{@key{ESC} @key{TAB}} or @kbd{C-M-i}. + +@vindex text-mode-hook + Entering Text mode runs the hook @code{text-mode-hook}. Other major +modes related to Text mode also run this hook, followed by hooks of +their own; this includes Paragraph-Indent Text mode, Nroff mode, @TeX{} +mode, Outline mode, and Mail mode. Hook functions on +@code{text-mode-hook} can look at the value of @code{major-mode} to see +which of these modes is actually being entered. @xref{Hooks}. + +@ifnottex + Emacs provides two other modes for editing text that is to be passed +through a text formatter to produce fancy formatted printed output. +@xref{Nroff Mode}, for editing input to the formatter nroff. +@xref{TeX Mode,,@TeX{} Mode}, for editing input to the formatter TeX. + + Another mode is used for editing outlines. It allows you to view the +text at various levels of detail. You can view either the outline +headings alone or both headings and text; you can also hide some of the +headings at lower levels from view to make the high level structure more +visible. @xref{Outline Mode}. +@end ifnottex + +@node Outline Mode +@section Outline Mode +@cindex Outline mode +@cindex mode, Outline +@cindex invisible lines + +@findex outline-mode +@findex outline-minor-mode +@vindex outline-minor-mode-prefix + Outline mode is a major mode much like Text mode but intended for +editing outlines. It allows you to make parts of the text temporarily +invisible so that you can see the outline structure. Type @kbd{M-x +outline-mode} to switch to Outline mode as the major mode of the current +buffer. + + When Outline mode makes a line invisible, the line does not appear +on the screen. The screen appears exactly as if the invisible line +were deleted, except that an ellipsis (three periods in a row) appears +at the end of the previous visible line. (Multiple consecutive +invisible lines produce just one ellipsis.) + + Editing commands that operate on lines, such as @kbd{C-n} and +@kbd{C-p}, treat the text of the invisible line as part of the previous +visible line. Killing the ellipsis at the end of a visible line +really kills all the following invisible lines. + + Outline minor mode provides the same commands as the major mode, +Outline mode, but you can use it in conjunction with other major modes. +Type @kbd{M-x outline-minor-mode} to enable the Outline minor mode in +the current buffer. You can also specify this in the text of a file, +with a file local variable of the form @samp{mode: outline-minor} +(@pxref{File Variables}). + +@kindex C-c @@ @r{(Outline minor mode)} + The major mode, Outline mode, provides special key bindings on the +@kbd{C-c} prefix. Outline minor mode provides similar bindings with +@kbd{C-c @@} as the prefix; this is to reduce the conflicts with the +major mode's special commands. (The variable +@code{outline-minor-mode-prefix} controls the prefix used.) + +@vindex outline-mode-hook + Entering Outline mode runs the hook @code{text-mode-hook} followed by +the hook @code{outline-mode-hook} (@pxref{Hooks}). + +@menu +* Format: Outline Format. What the text of an outline looks like. +* Motion: Outline Motion. Special commands for moving through + outlines. +* Visibility: Outline Visibility. Commands to control what is visible. +* Views: Outline Views. Outlines and multiple views. +* Foldout:: Folding means zooming in on outlines. +@end menu + +@node Outline Format +@subsection Format of Outlines + +@cindex heading lines (Outline mode) +@cindex body lines (Outline mode) + Outline mode assumes that the lines in the buffer are of two types: +@dfn{heading lines} and @dfn{body lines}. A heading line represents a +topic in the outline. Heading lines start with one or more stars; the +number of stars determines the depth of the heading in the outline +structure. Thus, a heading line with one star is a major topic; all the +heading lines with two stars between it and the next one-star heading +are its subtopics; and so on. Any line that is not a heading line is a +body line. Body lines belong with the preceding heading line. Here is +an example: + +@example +* Food +This is the body, +which says something about the topic of food. + +** Delicious Food +This is the body of the second-level header. + +** Distasteful Food +This could have +a body too, with +several lines. + +*** Dormitory Food + +* Shelter +Another first-level topic with its header line. +@end example + + A heading line together with all following body lines is called +collectively an @dfn{entry}. A heading line together with all following +deeper heading lines and their body lines is called a @dfn{subtree}. + +@vindex outline-regexp + You can customize the criterion for distinguishing heading lines by +setting the variable @code{outline-regexp}. (The recommended ways to +do this are in a major mode function or with a file local variable.) +Any line whose beginning has a match for this regexp is considered a +heading line. Matches that start within a line (not at the left +margin) do not count. + + The length of the matching text determines the level of the heading; +longer matches make a more deeply nested level. Thus, for example, if +a text formatter has commands @samp{@@chapter}, @samp{@@section} and +@samp{@@subsection} to divide the document into chapters and sections, +you could make those lines count as heading lines by setting +@code{outline-regexp} to @samp{"@@chap\\|@@\\(sub\\)*section"}. Note +the trick: the two words @samp{chapter} and @samp{section} are equally +long, but by defining the regexp to match only @samp{chap} we ensure +that the length of the text matched on a chapter heading is shorter, +so that Outline mode will know that sections are contained in +chapters. This works as long as no other command starts with +@samp{@@chap}. + +@vindex outline-level + You can explicitly specify a rule for calculating the level of a +heading line by setting the variable @code{outline-level}. The value +of @code{outline-level} should be a function that takes no arguments +and returns the level of the current heading. The recommended ways to +set this variable are in a major mode command or with a file local +variable. + +@node Outline Motion +@subsection Outline Motion Commands + + Outline mode provides special motion commands that move backward and +forward to heading lines. + +@table @kbd +@item C-c C-n +Move point to the next visible heading line +(@code{outline-next-visible-heading}). +@item C-c C-p +Move point to the previous visible heading line +(@code{outline-previous-visible-heading}). +@item C-c C-f +Move point to the next visible heading line at the same level +as the one point is on (@code{outline-forward-same-level}). +@item C-c C-b +Move point to the previous visible heading line at the same level +(@code{outline-backward-same-level}). +@item C-c C-u +Move point up to a lower-level (more inclusive) visible heading line +(@code{outline-up-heading}). +@end table + +@findex outline-next-visible-heading +@findex outline-previous-visible-heading +@kindex C-c C-n @r{(Outline mode)} +@kindex C-c C-p @r{(Outline mode)} + @kbd{C-c C-n} (@code{outline-next-visible-heading}) moves down to the next +heading line. @kbd{C-c C-p} (@code{outline-previous-visible-heading}) moves +similarly backward. Both accept numeric arguments as repeat counts. The +names emphasize that invisible headings are skipped, but this is not really +a special feature. All editing commands that look for lines ignore the +invisible lines automatically. + +@findex outline-up-heading +@findex outline-forward-same-level +@findex outline-backward-same-level +@kindex C-c C-f @r{(Outline mode)} +@kindex C-c C-b @r{(Outline mode)} +@kindex C-c C-u @r{(Outline mode)} + More powerful motion commands understand the level structure of headings. +@kbd{C-c C-f} (@code{outline-forward-same-level}) and +@kbd{C-c C-b} (@code{outline-backward-same-level}) move from one +heading line to another visible heading at the same depth in +the outline. @kbd{C-c C-u} (@code{outline-up-heading}) moves +backward to another heading that is less deeply nested. + +@node Outline Visibility +@subsection Outline Visibility Commands + + The other special commands of outline mode are used to make lines visible +or invisible. Their names all start with @code{hide} or @code{show}. +Most of them fall into pairs of opposites. They are not undoable; instead, +you can undo right past them. Making lines visible or invisible is simply +not recorded by the undo mechanism. + + Many of these commands act on the ``current'' heading line. If +point is on a heading line, that is the current heading line; if point +is on a body line, the current heading line is the nearest preceding +header line. + +@table @kbd +@item C-c C-c +Make the current heading line's body invisible (@code{hide-entry}). +@item C-c C-e +Make the current heading line's body visible (@code{show-entry}). +@item C-c C-d +Make everything under the current heading invisible, not including the +heading itself (@code{hide-subtree}). +@item C-c C-s +Make everything under the current heading visible, including body, +subheadings, and their bodies (@code{show-subtree}). +@item C-c C-l +Make the body of the current heading line, and of all its subheadings, +invisible (@code{hide-leaves}). +@item C-c C-k +Make all subheadings of the current heading line, at all levels, +visible (@code{show-branches}). +@item C-c C-i +Make immediate subheadings (one level down) of the current heading +line visible (@code{show-children}). +@item C-c C-t +Make all body lines in the buffer invisible (@code{hide-body}). +@item C-c C-a +Make all lines in the buffer visible (@code{show-all}). +@item C-c C-q +Hide everything except the top @var{n} levels of heading lines +(@code{hide-sublevels}). +@item C-c C-o +Hide everything except for the heading or body that point is in, plus +the headings leading up from there to the top level of the outline +(@code{hide-other}). +@end table + +@findex hide-entry +@findex show-entry +@kindex C-c C-c @r{(Outline mode)} +@kindex C-c C-e @r{(Outline mode)} + Two commands that are exact opposites are @kbd{C-c C-c} +(@code{hide-entry}) and @kbd{C-c C-e} (@code{show-entry}). They apply +to the body lines directly following the current heading line. +Subheadings and their bodies are not affected. + +@findex hide-subtree +@findex show-subtree +@kindex C-c C-s @r{(Outline mode)} +@kindex C-c C-d @r{(Outline mode)} +@cindex subtree (Outline mode) + Two more powerful opposites are @kbd{C-c C-d} (@code{hide-subtree}) +and @kbd{C-c C-s} (@code{show-subtree}). Both apply to the current +heading line's @dfn{subtree}: its body, all its subheadings, both +direct and indirect, and all of their bodies. In other words, the +subtree contains everything following the current heading line, up to +and not including the next heading of the same or higher rank. + +@findex hide-leaves +@findex show-branches +@kindex C-c C-l @r{(Outline mode)} +@kindex C-c C-k @r{(Outline mode)} + Intermediate between a visible subtree and an invisible one is having +all the subheadings visible but none of the body. There are two +commands for doing this, depending on whether you want to hide the +bodies or make the subheadings visible. They are @kbd{C-c C-l} +(@code{hide-leaves}) and @kbd{C-c C-k} (@code{show-branches}). + +@kindex C-c C-i @r{(Outline mode)} +@findex show-children + A little weaker than @code{show-branches} is @kbd{C-c C-i} +(@code{show-children}). It makes just the direct subheadings +visible---those one level down. Deeper subheadings remain invisible, if +they were invisible. + +@findex hide-body +@findex show-all +@kindex C-c C-t @r{(Outline mode)} +@kindex C-c C-a @r{(Outline mode)} + Two commands have a blanket effect on the whole file. @kbd{C-c C-t} +(@code{hide-body}) makes all body lines invisible, so that you see just +the outline structure (as a special exception, it will not hide lines +at the top of the file, preceding the first header line, even though +these are technically body lines). @kbd{C-c C-a} (@code{show-all}) +makes all lines visible. These commands can be thought of as a pair +of opposites even though @kbd{C-c C-a} applies to more than just body +lines. + +@findex hide-sublevels +@kindex C-c C-q @r{(Outline mode)} + The command @kbd{C-c C-q} (@code{hide-sublevels}) hides all but the +top level headings. With a numeric argument @var{n}, it hides everything +except the top @var{n} levels of heading lines. + +@findex hide-other +@kindex C-c C-o @r{(Outline mode)} + The command @kbd{C-c C-o} (@code{hide-other}) hides everything except +the heading and body text that point is in, plus its parents (the headers +leading up from there to top level in the outline) and the top level +headings. + +@findex reveal-mode + When incremental search finds text that is hidden by Outline mode, +it makes that part of the buffer visible. If you exit the search +at that position, the text remains visible. You can also +automatically make text visible as you navigate in it by using +@kbd{M-x reveal-mode}. + +@node Outline Views +@subsection Viewing One Outline in Multiple Views + +@cindex multiple views of outline +@cindex views of an outline +@cindex outline with multiple views +@cindex indirect buffers and outlines + You can display two views of a single outline at the same time, in +different windows. To do this, you must create an indirect buffer using +@kbd{M-x make-indirect-buffer}. The first argument of this command is +the existing outline buffer name, and its second argument is the name to +use for the new indirect buffer. @xref{Indirect Buffers}. + + Once the indirect buffer exists, you can display it in a window in the +normal fashion, with @kbd{C-x 4 b} or other Emacs commands. The Outline +mode commands to show and hide parts of the text operate on each buffer +independently; as a result, each buffer can have its own view. If you +want more than two views on the same outline, create additional indirect +buffers. + +@node Foldout +@subsection Folding Editing + +@cindex folding editing + The Foldout package extends Outline mode and Outline minor mode with +``folding'' commands. The idea of folding is that you zoom in on a +nested portion of the outline, while hiding its relatives at higher +levels. + + Consider an Outline mode buffer with all the text and subheadings under +level-1 headings hidden. To look at what is hidden under one of these +headings, you could use @kbd{C-c C-e} (@kbd{M-x show-entry}) to expose +the body, or @kbd{C-c C-i} to expose the child (level-2) headings. + +@kindex C-c C-z +@findex foldout-zoom-subtree + With Foldout, you use @kbd{C-c C-z} (@kbd{M-x foldout-zoom-subtree}). +This exposes the body and child subheadings, and narrows the buffer so +that only the @w{level-1} heading, the body and the level-2 headings are +visible. Now to look under one of the level-2 headings, position the +cursor on it and use @kbd{C-c C-z} again. This exposes the level-2 body +and its level-3 child subheadings and narrows the buffer again. Zooming +in on successive subheadings can be done as much as you like. A string +in the mode line shows how deep you've gone. + + When zooming in on a heading, to see only the child subheadings specify +a numeric argument: @kbd{C-u C-c C-z}. The number of levels of children +can be specified too (compare @kbd{M-x show-children}), e.g.@: @kbd{M-2 +C-c C-z} exposes two levels of child subheadings. Alternatively, the +body can be specified with a negative argument: @kbd{M-- C-c C-z}. The +whole subtree can be expanded, similarly to @kbd{C-c C-s} (@kbd{M-x +show-subtree}), by specifying a zero argument: @kbd{M-0 C-c C-z}. + + While you're zoomed in, you can still use Outline mode's exposure and +hiding functions without disturbing Foldout. Also, since the buffer is +narrowed, ``global'' editing actions will only affect text under the +zoomed-in heading. This is useful for restricting changes to a +particular chapter or section of your document. + +@kindex C-c C-x +@findex foldout-exit-fold + To unzoom (exit) a fold, use @kbd{C-c C-x} (@kbd{M-x foldout-exit-fold}). +This hides all the text and subheadings under the top-level heading and +returns you to the previous view of the buffer. Specifying a numeric +argument exits that many levels of folds. Specifying a zero argument +exits all folds. + + To cancel the narrowing of a fold without hiding the text and +subheadings, specify a negative argument. For example, @kbd{M--2 C-c +C-x} exits two folds and leaves the text and subheadings exposed. + + Foldout mode also provides mouse commands for entering and exiting +folds, and for showing and hiding text: + +@table @asis +@item @kbd{C-M-Mouse-1} zooms in on the heading clicked on +@itemize @asis +@item +single click: expose body. +@item +double click: expose subheadings. +@item +triple click: expose body and subheadings. +@item +quad click: expose entire subtree. +@end itemize +@item @kbd{C-M-Mouse-2} exposes text under the heading clicked on +@itemize @asis +@item +single click: expose body. +@item +double click: expose subheadings. +@item +triple click: expose body and subheadings. +@item +quad click: expose entire subtree. +@end itemize +@item @kbd{C-M-Mouse-3} hides text under the heading clicked on or exits fold +@itemize @asis +@item +single click: hide subtree. +@item +double click: exit fold and hide text. +@item +triple click: exit fold without hiding text. +@item +quad click: exit all folds and hide text. +@end itemize +@end table + +@vindex foldout-mouse-modifiers + You can specify different modifier keys (instead of +@kbd{Control-Meta-}) by setting @code{foldout-mouse-modifiers}; but if +you have already loaded the @file{foldout.el} library, you must reload +it in order for this to take effect. + + To use the Foldout package, you can type @kbd{M-x load-library +@key{RET} foldout @key{RET}}; or you can arrange for to do that +automatically by putting this in your @file{.emacs} file: + +@example +(eval-after-load "outline" '(require 'foldout)) +@end example + +@node TeX Mode +@section @TeX{} Mode +@cindex @TeX{} mode +@cindex La@TeX{} mode +@cindex Sli@TeX{} mode +@cindex Doc@TeX{} mode +@cindex mode, @TeX{} +@cindex mode, La@TeX{} +@cindex mode, Sli@TeX{} +@cindex mode, Doc@TeX{} +@findex tex-mode +@findex plain-tex-mode +@findex latex-mode +@findex slitex-mode +@findex doctex-mode + + @TeX{} is a powerful text formatter written by Donald Knuth; it is +also free software, like GNU Emacs. La@TeX{} is a simplified input +format for @TeX{}, implemented by @TeX{} macros; it comes with @TeX{}. +Sli@TeX{} is a special form of La@TeX{}.@footnote{Sli@TeX{} is +obsoleted by the @samp{slides} document class and other alternative +packages in recent La@TeX{} versions.} Doc@TeX{} (@file{.dtx}) is a +special file format in which the La@TeX{} sources are written, +combining sources with documentation. + + Emacs has a special @TeX{} mode for editing @TeX{} input files. +It provides facilities for checking the balance of delimiters and for +invoking @TeX{} on all or part of the file. + +@vindex tex-default-mode + @TeX{} mode has four variants: Plain @TeX{} mode, La@TeX{} mode, +Sli@TeX{} mode, and Doc@TeX{} mode (these distinct major modes differ +only slightly). They are designed for editing the four different +formats. The command @kbd{M-x tex-mode} looks at the contents of the +buffer to determine whether the contents appear to be either La@TeX{} +input, Sli@TeX{}, or Doc@TeX{} input; if so, it selects the +appropriate mode. If the file contents do not appear to be La@TeX{}, +Sli@TeX{} or Doc@TeX{}, it selects Plain @TeX{} mode. If the contents +are insufficient to determine this, the variable +@code{tex-default-mode} controls which mode is used. + + When @kbd{M-x tex-mode} does not guess right, you can use the commands +@kbd{M-x plain-tex-mode}, @kbd{M-x latex-mode}, @kbd{M-x slitex-mode}, +and @kbd{doctex-mode} to select explicitly the particular variants of +@TeX{} mode. + +@menu +* Editing: TeX Editing. Special commands for editing in TeX mode. +* LaTeX: LaTeX Editing. Additional commands for LaTeX input files. +* Printing: TeX Print. Commands for printing part of a file with TeX. +* Misc: TeX Misc. Customization of TeX mode, and related features. +@end menu + +@node TeX Editing +@subsection @TeX{} Editing Commands + + Here are the special commands provided in @TeX{} mode for editing the +text of the file. + +@table @kbd +@item " +Insert, according to context, either @samp{``} or @samp{"} or +@samp{''} (@code{tex-insert-quote}). +@item C-j +Insert a paragraph break (two newlines) and check the previous +paragraph for unbalanced braces or dollar signs +(@code{tex-terminate-paragraph}). +@item M-x tex-validate-region +Check each paragraph in the region for unbalanced braces or dollar signs. +@item C-c @{ +Insert @samp{@{@}} and position point between them (@code{tex-insert-braces}). +@item C-c @} +Move forward past the next unmatched close brace (@code{up-list}). +@end table + +@findex tex-insert-quote +@kindex " @r{(@TeX{} mode)} + In @TeX{}, the character @samp{"} is not normally used; we use +@samp{``} to start a quotation and @samp{''} to end one. To make +editing easier under this formatting convention, @TeX{} mode overrides +the normal meaning of the key @kbd{"} with a command that inserts a pair +of single-quotes or backquotes (@code{tex-insert-quote}). To be +precise, this command inserts @samp{``} after whitespace or an open +brace, @samp{"} after a backslash, and @samp{''} after any other +character. + + If you need the character @samp{"} itself in unusual contexts, use +@kbd{C-q} to insert it. Also, @kbd{"} with a numeric argument always +inserts that number of @samp{"} characters. You can turn off the +feature of @kbd{"} expansion by eliminating that binding in the local +map (@pxref{Key Bindings}). + + In @TeX{} mode, @samp{$} has a special syntax code which attempts to +understand the way @TeX{} math mode delimiters match. When you insert a +@samp{$} that is meant to exit math mode, the position of the matching +@samp{$} that entered math mode is displayed for a second. This is the +same feature that displays the open brace that matches a close brace that +is inserted. However, there is no way to tell whether a @samp{$} enters +math mode or leaves it; so when you insert a @samp{$} that enters math +mode, the previous @samp{$} position is shown as if it were a match, even +though they are actually unrelated. + +@findex tex-insert-braces +@kindex C-c @{ @r{(@TeX{} mode)} +@findex up-list +@kindex C-c @} @r{(@TeX{} mode)} + @TeX{} uses braces as delimiters that must match. Some users prefer +to keep braces balanced at all times, rather than inserting them +singly. Use @kbd{C-c @{} (@code{tex-insert-braces}) to insert a pair of +braces. It leaves point between the two braces so you can insert the +text that belongs inside. Afterward, use the command @kbd{C-c @}} +(@code{up-list}) to move forward past the close brace. + +@findex tex-validate-region +@findex tex-terminate-paragraph +@kindex C-j @r{(@TeX{} mode)} + There are two commands for checking the matching of braces. @kbd{C-j} +(@code{tex-terminate-paragraph}) checks the paragraph before point, and +inserts two newlines to start a new paragraph. It outputs a message in +the echo area if any mismatch is found. @kbd{M-x tex-validate-region} +checks a region, paragraph by paragraph. The errors are listed in the +@samp{*Occur*} buffer, and you can use @kbd{C-c C-c} or @kbd{Mouse-2} in +that buffer to go to a particular mismatch. + + Note that Emacs commands count square brackets and parentheses in +@TeX{} mode, not just braces. This is not strictly correct for the +purpose of checking @TeX{} syntax. However, parentheses and square +brackets are likely to be used in text as matching delimiters and it is +useful for the various motion commands and automatic match display to +work with them. + +@node LaTeX Editing +@subsection La@TeX{} Editing Commands + + La@TeX{} mode, and its variant, Sli@TeX{} mode, provide a few extra +features not applicable to plain @TeX{}. + +@table @kbd +@item C-c C-o +Insert @samp{\begin} and @samp{\end} for La@TeX{} block and position +point on a line between them (@code{tex-latex-block}). +@item C-c C-e +Close the innermost La@TeX{} block not yet closed +(@code{tex-close-latex-block}). +@end table + +@findex tex-latex-block +@kindex C-c C-o @r{(La@TeX{} mode)} +@vindex latex-block-names + In La@TeX{} input, @samp{\begin} and @samp{\end} commands are used to +group blocks of text. To insert a @samp{\begin} and a matching +@samp{\end} (on a new line following the @samp{\begin}), use @kbd{C-c +C-o} (@code{tex-latex-block}). A blank line is inserted between the +two, and point is left there. You can use completion when you enter the +block type; to specify additional block type names beyond the standard +list, set the variable @code{latex-block-names}. For example, here's +how to add @samp{theorem}, @samp{corollary}, and @samp{proof}: + +@example +(setq latex-block-names '("theorem" "corollary" "proof")) +@end example + +@findex tex-close-latex-block +@kindex C-c C-e @r{(La@TeX{} mode)} + In La@TeX{} input, @samp{\begin} and @samp{\end} commands must +balance. You can use @kbd{C-c C-e} (@code{tex-close-latex-block}) to +insert automatically a matching @samp{\end} to match the last unmatched +@samp{\begin}. It indents the @samp{\end} to match the corresponding +@samp{\begin}. It inserts a newline after @samp{\end} if point is at +the beginning of a line. + +@node TeX Print +@subsection @TeX{} Printing Commands + + You can invoke @TeX{} as an inferior of Emacs on either the entire +contents of the buffer or just a region at a time. Running @TeX{} in +this way on just one chapter is a good way to see what your changes +look like without taking the time to format the entire file. + +@table @kbd +@item C-c C-r +Invoke @TeX{} on the current region, together with the buffer's header +(@code{tex-region}). +@item C-c C-b +Invoke @TeX{} on the entire current buffer (@code{tex-buffer}). +@item C-c @key{TAB} +Invoke Bib@TeX{} on the current file (@code{tex-bibtex-file}). +@item C-c C-f +Invoke @TeX{} on the current file (@code{tex-file}). +@item C-c C-l +Recenter the window showing output from the inferior @TeX{} so that +the last line can be seen (@code{tex-recenter-output-buffer}). +@item C-c C-k +Kill the @TeX{} subprocess (@code{tex-kill-job}). +@item C-c C-p +Print the output from the last @kbd{C-c C-r}, @kbd{C-c C-b}, or @kbd{C-c +C-f} command (@code{tex-print}). +@item C-c C-v +Preview the output from the last @kbd{C-c C-r}, @kbd{C-c C-b}, or @kbd{C-c +C-f} command (@code{tex-view}). +@item C-c C-q +Show the printer queue (@code{tex-show-print-queue}). +@item C-c C-c +Invoke some other compilation command on the entire current buffer +(@code{tex-compile}). +@end table + +@findex tex-buffer +@kindex C-c C-b @r{(@TeX{} mode)} +@findex tex-print +@kindex C-c C-p @r{(@TeX{} mode)} +@findex tex-view +@kindex C-c C-v @r{(@TeX{} mode)} +@findex tex-show-print-queue +@kindex C-c C-q @r{(@TeX{} mode)} + You can pass the current buffer through an inferior @TeX{} by means of +@kbd{C-c C-b} (@code{tex-buffer}). The formatted output appears in a +temporary file; to print it, type @kbd{C-c C-p} (@code{tex-print}). +Afterward, you can use @kbd{C-c C-q} (@code{tex-show-print-queue}) to +view the progress of your output towards being printed. If your terminal +has the ability to display @TeX{} output files, you can preview the +output on the terminal with @kbd{C-c C-v} (@code{tex-view}). + +@cindex @env{TEXINPUTS} environment variable +@vindex tex-directory + You can specify the directory to use for running @TeX{} by setting the +variable @code{tex-directory}. @code{"."} is the default value. If +your environment variable @env{TEXINPUTS} contains relative directory +names, or if your files contains @samp{\input} commands with relative +file names, then @code{tex-directory} @emph{must} be @code{"."} or you +will get the wrong results. Otherwise, it is safe to specify some other +directory, such as @code{"/tmp"}. + +@vindex tex-run-command +@vindex latex-run-command +@vindex slitex-run-command +@vindex tex-dvi-print-command +@vindex tex-dvi-view-command +@vindex tex-show-queue-command + If you want to specify which shell commands are used in the inferior @TeX{}, +you can do so by setting the values of the variables @code{tex-run-command}, +@code{latex-run-command}, @code{slitex-run-command}, +@code{tex-dvi-print-command}, @code{tex-dvi-view-command}, and +@code{tex-show-queue-command}. The default values may +(or may not) be appropriate for your system. + + Normally, the file name given to these commands comes at the end of +the command string; for example, @samp{latex @var{filename}}. In some +cases, however, the file name needs to be embedded in the command; an +example is when you need to provide the file name as an argument to one +command whose output is piped to another. You can specify where to put +the file name with @samp{*} in the command string. For example, + +@example +(setq tex-dvi-print-command "dvips -f * | lpr") +@end example + +@findex tex-kill-job +@kindex C-c C-k @r{(@TeX{} mode)} +@findex tex-recenter-output-buffer +@kindex C-c C-l @r{(@TeX{} mode)} + The terminal output from @TeX{}, including any error messages, appears +in a buffer called @samp{*tex-shell*}. If @TeX{} gets an error, you can +switch to this buffer and feed it input (this works as in Shell mode; +@pxref{Interactive Shell}). Without switching to this buffer you can +scroll it so that its last line is visible by typing @kbd{C-c +C-l}. + + Type @kbd{C-c C-k} (@code{tex-kill-job}) to kill the @TeX{} process if +you see that its output is no longer useful. Using @kbd{C-c C-b} or +@kbd{C-c C-r} also kills any @TeX{} process still running. + +@findex tex-region +@kindex C-c C-r @r{(@TeX{} mode)} + You can also pass an arbitrary region through an inferior @TeX{} by typing +@kbd{C-c C-r} (@code{tex-region}). This is tricky, however, because most files +of @TeX{} input contain commands at the beginning to set parameters and +define macros, without which no later part of the file will format +correctly. To solve this problem, @kbd{C-c C-r} allows you to designate a +part of the file as containing essential commands; it is included before +the specified region as part of the input to @TeX{}. The designated part +of the file is called the @dfn{header}. + +@cindex header (@TeX{} mode) + To indicate the bounds of the header in Plain @TeX{} mode, you insert two +special strings in the file. Insert @samp{%**start of header} before the +header, and @samp{%**end of header} after it. Each string must appear +entirely on one line, but there may be other text on the line before or +after. The lines containing the two strings are included in the header. +If @samp{%**start of header} does not appear within the first 100 lines of +the buffer, @kbd{C-c C-r} assumes that there is no header. + + In La@TeX{} mode, the header begins with @samp{\documentclass} or +@samp{\documentstyle} and ends with @samp{\begin@{document@}}. These +are commands that La@TeX{} requires you to use in any case, so nothing +special needs to be done to identify the header. + +@findex tex-file +@kindex C-c C-f @r{(@TeX{} mode)} + The commands (@code{tex-buffer}) and (@code{tex-region}) do all of their +work in a temporary directory, and do not have available any of the auxiliary +files needed by @TeX{} for cross-references; these commands are generally +not suitable for running the final copy in which all of the cross-references +need to be correct. + + When you want the auxiliary files for cross references, use @kbd{C-c +C-f} (@code{tex-file}) which runs @TeX{} on the current buffer's file, +in that file's directory. Before running @TeX{}, it offers to save any +modified buffers. Generally, you need to use (@code{tex-file}) twice to +get the cross-references right. + +@vindex tex-start-options + The value of the variable @code{tex-start-options} specifies +options for the @TeX{} run. + +@vindex tex-start-commands + The value of the variable @code{tex-start-commands} specifies @TeX{} +commands for starting @TeX{}. The default value causes @TeX{} to run +in nonstop mode. To run @TeX{} interactively, set the variable to +@code{""}. + +@vindex tex-main-file + Large @TeX{} documents are often split into several files---one main +file, plus subfiles. Running @TeX{} on a subfile typically does not +work; you have to run it on the main file. In order to make +@code{tex-file} useful when you are editing a subfile, you can set the +variable @code{tex-main-file} to the name of the main file. Then +@code{tex-file} runs @TeX{} on that file. + + The most convenient way to use @code{tex-main-file} is to specify it +in a local variable list in each of the subfiles. @xref{File +Variables}. + +@findex tex-bibtex-file +@kindex C-c TAB @r{(@TeX{} mode)} +@vindex tex-bibtex-command + For La@TeX{} files, you can use Bib@TeX{} to process the auxiliary +file for the current buffer's file. Bib@TeX{} looks up bibliographic +citations in a data base and prepares the cited references for the +bibliography section. The command @kbd{C-c @key{TAB}} +(@code{tex-bibtex-file}) runs the shell command +(@code{tex-bibtex-command}) to produce a @samp{.bbl} file for the +current buffer's file. Generally, you need to do @kbd{C-c C-f} +(@code{tex-file}) once to generate the @samp{.aux} file, then do +@kbd{C-c @key{TAB}} (@code{tex-bibtex-file}), and then repeat @kbd{C-c C-f} +(@code{tex-file}) twice more to get the cross-references correct. + +@findex tex-compile +@kindex C-c C-c @r{(@TeX{} mode)} + To invoke some other compilation program on the current @TeX{} +buffer, type @kbd{C-c C-c} (@code{tex-compile}). This command knows +how to pass arguments to many common programs, including +@file{pdflatex}, @file{yap}, @file{xdvi}, and @file{dvips}. You can +select your desired compilation program using the standard completion +keys (@pxref{Completion}). + +@node TeX Misc +@subsection @TeX{} Mode Miscellany + +@vindex tex-shell-hook +@vindex tex-mode-hook +@vindex latex-mode-hook +@vindex slitex-mode-hook +@vindex plain-tex-mode-hook + Entering any variant of @TeX{} mode runs the hooks +@code{text-mode-hook} and @code{tex-mode-hook}. Then it runs either +@code{plain-tex-mode-hook}, @code{latex-mode-hook}, or +@code{slitex-mode-hook}, whichever is appropriate. Starting the +@TeX{} shell runs the hook @code{tex-shell-hook}. @xref{Hooks}. + +@findex iso-iso2tex +@findex iso-tex2iso +@findex iso-iso2gtex +@findex iso-gtex2iso +@cindex Latin-1 @TeX{} encoding +@cindex @TeX{} encoding + The commands @kbd{M-x iso-iso2tex}, @kbd{M-x iso-tex2iso}, @kbd{M-x +iso-iso2gtex} and @kbd{M-x iso-gtex2iso} can be used to convert +between Latin-1 encoded files and @TeX{}-encoded equivalents. +@ignore +@c Too cryptic to be useful, too cryptic for me to make it better -- rms. + They +are included by default in the @code{format-alist} variable, so they +can be used with @kbd{M-x format-find-file}, for instance. +@end ignore + +@ignore @c Not worth documenting if it is only for Czech -- rms. +@findex tildify-buffer +@findex tildify-region +@cindex ties, @TeX{}, inserting +@cindex hard spaces, @TeX{}, inserting + The commands @kbd{M-x tildify-buffer} and @kbd{M-x tildify-region} +insert @samp{~} (@dfn{tie}) characters where they are conventionally +required. This is set up for Czech---customize the group +@samp{tildify} for other languages or for other sorts of markup. +@end ignore + +@cindex Ref@TeX{} package +@cindex references, La@TeX{} +@cindex La@TeX{} references + For managing all kinds of references for La@TeX{}, you can use +Ref@TeX{}. @inforef{Top,, reftex}. + +@node HTML Mode +@section SGML, XML, and HTML Modes + + The major modes for SGML and HTML include indentation support and +commands to operate on tags. This section describes the special +commands of these modes. (HTML mode is a slightly customized variant +of SGML mode.) + +@table @kbd +@item C-c C-n +@kindex C-c C-n @r{(SGML mode)} +@findex sgml-name-char +Interactively specify a special character and insert the SGML +@samp{&}-command for that character. + +@item C-c C-t +@kindex C-c C-t @r{(SGML mode)} +@findex sgml-tag +Interactively specify a tag and its attributes (@code{sgml-tag}). +This command asks you for a tag name and for the attribute values, +then inserts both the opening tag and the closing tag, leaving point +between them. + +With a prefix argument @var{n}, the command puts the tag around the +@var{n} words already present in the buffer after point. With +@minus{}1 as argument, it puts the tag around the region. (In +Transient Mark mode, it does this whenever a region is active.) + +@item C-c C-a +@kindex C-c C-a @r{(SGML mode)} +@findex sgml-attributes +Interactively insert attribute values for the current tag +(@code{sgml-attributes}). + +@item C-c C-f +@kindex C-c C-f @r{(SGML mode)} +@findex sgml-skip-tag-forward +Skip across a balanced tag group (which extends from an opening tag +through its corresponding closing tag) (@code{sgml-skip-tag-forward}). +A numeric argument acts as a repeat count. + +@item C-c C-b +@kindex C-c C-b @r{(SGML mode)} +@findex sgml-skip-tag-backward +Skip backward across a balanced tag group (which extends from an +opening tag through its corresponding closing tag) +(@code{sgml-skip-tag-forward}). A numeric argument acts as a repeat +count. + +@item C-c C-d +@kindex C-c C-d @r{(SGML mode)} +@findex sgml-delete-tag +Delete the tag at or after point, and delete the matching tag too +(@code{sgml-delete-tag}). If the tag at or after point is an opening +tag, delete the closing tag too; if it is a closing tag, delete the +opening tag too. + +@item C-c ? @var{tag} @key{RET} +@kindex C-c ? @r{(SGML mode)} +@findex sgml-tag-help +Display a description of the meaning of tag @var{tag} +(@code{sgml-tag-help}). If the argument @var{tag} is empty, describe +the tag at point. + +@item C-c / +@kindex C-c / @r{(SGML mode)} +@findex sgml-close-tag +Insert a close tag for the innermost unterminated tag +(@code{sgml-close-tag}). If called from within a tag or a comment, +close this element instead of inserting a close tag. + +@item C-c 8 +@kindex C-c 8 @r{(SGML mode)} +@findex sgml-name-8bit-mode +Toggle a minor mode in which Latin-1 characters insert the +corresponding SGML commands that stand for them, instead of the +characters themselves (@code{sgml-name-8bit-mode}). + +@item C-c C-v +@kindex C-c C-v @r{(SGML mode)} +@findex sgml-validate +Run a shell command (which you must specify) to validate the current +buffer as SGML (@code{sgml-validate}). + +@item C-c TAB +@kindex C-c TAB @r{(SGML mode)} +@findex sgml-tags-invisible +Toggle the visibility of existing tags in the buffer. This can be +used as a cheap preview. +@end table + +@vindex sgml-xml-mode + SGML mode and HTML mode support XML also. In XML, every opening tag +must have an explicit closing tag. When @code{sgml-xml-mode} is +non-@code{nil}, SGML mode and HTML mode always insert explicit +closing tags. When you visit a file, these modes determine from the +file contents whether it is XML or not, and set @code{sgml-xml-mode} +accordingly, so that they do the right thing for the file in either +case. + +@node Nroff Mode +@section Nroff Mode + +@cindex nroff +@findex nroff-mode + Nroff mode is a mode like Text mode but modified to handle nroff commands +present in the text. Invoke @kbd{M-x nroff-mode} to enter this mode. It +differs from Text mode in only a few ways. All nroff command lines are +considered paragraph separators, so that filling will never garble the +nroff commands. Pages are separated by @samp{.bp} commands. Comments +start with backslash-doublequote. Also, three special commands are +provided that are not in Text mode: + +@findex forward-text-line +@findex backward-text-line +@findex count-text-lines +@kindex M-n @r{(Nroff mode)} +@kindex M-p @r{(Nroff mode)} +@kindex M-? @r{(Nroff mode)} +@table @kbd +@item M-n +Move to the beginning of the next line that isn't an nroff command +(@code{forward-text-line}). An argument is a repeat count. +@item M-p +Like @kbd{M-n} but move up (@code{backward-text-line}). +@item M-? +Displays in the echo area the number of text lines (lines that are not +nroff commands) in the region (@code{count-text-lines}). +@end table + +@findex electric-nroff-mode + The other feature of Nroff mode is that you can turn on Electric Nroff +mode. This is a minor mode that you can turn on or off with @kbd{M-x +electric-nroff-mode} (@pxref{Minor Modes}). When the mode is on, each +time you use @key{RET} to end a line that contains an nroff command that +opens a kind of grouping, the matching nroff command to close that +grouping is automatically inserted on the following line. For example, +if you are at the beginning of a line and type @kbd{.@: ( b @key{RET}}, +this inserts the matching command @samp{.)b} on a new line following +point. + + If you use Outline minor mode with Nroff mode (@pxref{Outline Mode}), +heading lines are lines of the form @samp{.H} followed by a number (the +header level). + +@vindex nroff-mode-hook + Entering Nroff mode runs the hook @code{text-mode-hook}, followed by +the hook @code{nroff-mode-hook} (@pxref{Hooks}). + +@node Formatted Text +@section Editing Formatted Text + +@cindex Enriched mode +@cindex mode, Enriched +@cindex formatted text +@cindex WYSIWYG +@cindex word processing + @dfn{Enriched mode} is a minor mode for editing files that contain +formatted text in WYSIWYG fashion, as in a word processor. Currently, +formatted text in Enriched mode can specify fonts, colors, underlining, +margins, and types of filling and justification. In the future, we plan +to implement other formatting features as well. + + Enriched mode is a minor mode (@pxref{Minor Modes}). It is +typically used in conjunction with Text mode (@pxref{Text Mode}), but +you can also use it with other major modes such as Outline mode and +Paragraph-Indent Text mode. + +@cindex text/enriched MIME format + Potentially, Emacs can store formatted text files in various file +formats. Currently, only one format is implemented: @dfn{text/enriched} +format, which is defined by the MIME protocol. @xref{Format +Conversion,, Format Conversion, elisp, the Emacs Lisp Reference Manual}, +for details of how Emacs recognizes and converts file formats. + + The Emacs distribution contains a formatted text file that can serve as +an example. Its name is @file{etc/enriched.doc}. It contains samples +illustrating all the features described in this section. It also +contains a list of ideas for future enhancements. + +@menu +* Requesting Formatted Text:: Entering and exiting Enriched mode. +* Hard and Soft Newlines:: There are two different kinds of newlines. +* Editing Format Info:: How to edit text properties. +* Faces: Format Faces. Bold, italic, underline, etc. +* Color: Format Colors. Changing the color of text. +* Indent: Format Indentation. Changing the left and right margins. +* Justification: Format Justification. + Centering, setting text flush with the + left or right margin, etc. +* Other: Format Properties. The "special" text properties submenu. +* Forcing Enriched Mode:: How to force use of Enriched mode. +@end menu + +@node Requesting Formatted Text +@subsection Requesting to Edit Formatted Text + + Whenever you visit a file that Emacs saved in the text/enriched +format, Emacs automatically converts the formatting information in the +file into Emacs's own internal format (known as @dfn{text +properties}), and turns on Enriched mode. + +@findex enriched-mode + To create a new file of formatted text, first visit the nonexistent +file, then type @kbd{M-x enriched-mode} before you start inserting text. +This command turns on Enriched mode. Do this before you begin inserting +text, to ensure that the text you insert is handled properly. + + More generally, the command @code{enriched-mode} turns Enriched mode +on if it was off, and off if it was on. With a prefix argument, this +command turns Enriched mode on if the argument is positive, and turns +the mode off otherwise. + + When you save a buffer while Enriched mode is enabled in it, Emacs +automatically converts the text to text/enriched format while writing it +into the file. When you visit the file again, Emacs will automatically +recognize the format, reconvert the text, and turn on Enriched mode +again. + +@vindex enriched-translations + You can add annotations for saving additional text properties, which +Emacs normally does not save, by adding to @code{enriched-translations}. +Note that the text/enriched standard requires any non-standard +annotations to have names starting with @samp{x-}, as in +@samp{x-read-only}. This ensures that they will not conflict with +standard annotations that may be added later. + + @xref{Text Properties,,, elisp, the Emacs Lisp Reference Manual}, +for more information about text properties. + +@node Hard and Soft Newlines +@subsection Hard and Soft Newlines +@cindex hard newline +@cindex soft newline +@cindex newlines, hard and soft + +@cindex use-hard-newlines + In formatted text, Emacs distinguishes between two different kinds of +newlines, @dfn{hard} newlines and @dfn{soft} newlines. (You can enable +or disable this feature separately in any buffer with the command +@code{use-hard-newlines}.) + + Hard newlines are used to separate paragraphs, or items in a list, or +anywhere that there should always be a line break regardless of the +margins. The @key{RET} command (@code{newline}) and @kbd{C-o} +(@code{open-line}) insert hard newlines. + + Soft newlines are used to make text fit between the margins. All the +fill commands, including Auto Fill, insert soft newlines---and they +delete only soft newlines. + + Although hard and soft newlines look the same, it is important to bear +the difference in mind. Do not use @key{RET} to break lines in the +middle of filled paragraphs, or else you will get hard newlines that are +barriers to further filling. Instead, let Auto Fill mode break lines, +so that if the text or the margins change, Emacs can refill the lines +properly. @xref{Auto Fill}. + + On the other hand, in tables and lists, where the lines should always +remain as you type them, you can use @key{RET} to end lines. For these +lines, you may also want to set the justification style to +@code{unfilled}. @xref{Format Justification}. + +@node Editing Format Info +@subsection Editing Format Information + + There are two ways to alter the formatting information for a formatted +text file: with keyboard commands, and with the mouse. + + The easiest way to add properties to your document is with the Text +Properties menu. You can get to this menu in two ways: from the Edit +menu in the menu bar (use @kbd{@key{F10} e t} if you have no mouse), +or with @kbd{C-Mouse-2} (hold the @key{CTRL} key and press the middle +mouse button). There are also keyboard commands described in the +following section. + + Most of the items in the Text Properties menu lead to other submenus. +These are described in the sections that follow. Some items run +commands directly: + +@table @code +@findex facemenu-remove-face-props +@item Remove Face Properties +Delete from the region all face and color text properties +(@code{facemenu-remove-face-props}). + +@findex facemenu-remove-all +@item Remove Text Properties +Delete @emph{all} text properties from the region +(@code{facemenu-remove-all}). + +@findex describe-text-properties +@cindex text properties of characters +@cindex overlays at character position +@cindex widgets at buffer position +@cindex buttons at buffer position +@item Describe Properties +List all the text properties, widgets, buttons, and overlays of the +character following point (@code{describe-text-properties}). + +@item Display Faces +Display a list of all the defined faces (@code{list-faces-display}). + +@item Display Colors +Display a list of all the defined colors (@code{list-colors-display}). +@end table + +@node Format Faces +@subsection Faces in Formatted Text + + The Faces submenu lists various Emacs faces including @code{bold}, +@code{italic}, and @code{underline} (@pxref{Faces}). These menu items +operate on the region if it is active and nonempty. Otherwise, they +specify to use that face for an immediately following self-inserting +character. Instead of the menu, you can use these keyboard commands: + +@table @kbd +@kindex M-o d @r{(Enriched mode)} +@findex facemenu-set-default +@item M-o d +Remove all @code{face} properties from the region (which includes +specified colors), or force the following inserted character to have no +@code{face} property (@code{facemenu-set-default}). +@kindex M-o b @r{(Enriched mode)} +@findex facemenu-set-bold +@item M-o b +Add the face @code{bold} to the region or to the following inserted +character (@code{facemenu-set-bold}). +@kindex M-o i @r{(Enriched mode)} +@findex facemenu-set-italic +@item M-o i +Add the face @code{italic} to the region or to the following inserted +character (@code{facemenu-set-italic}). +@kindex M-o l @r{(Enriched mode)} +@findex facemenu-set-bold-italic +@item M-o l +Add the face @code{bold-italic} to the region or to the following +inserted character (@code{facemenu-set-bold-italic}). +@kindex M-o u @r{(Enriched mode)} +@findex facemenu-set-underline +@item M-o u +Add the face @code{underline} to the region or to the following inserted +character (@code{facemenu-set-underline}). +@kindex M-o o @r{(Enriched mode)} +@findex facemenu-set-face +@item M-o o @var{face} @key{RET} +Add the face @var{face} to the region or to the following inserted +character (@code{facemenu-set-face}). +@end table + + With a prefix argument, all these commands apply to an immediately +following self-inserting character, disregarding the region. + + A self-inserting character normally inherits the @code{face} +property (and most other text properties) from the preceding character +in the buffer. If you use the above commands to specify face for the +next self-inserting character, or the next section's commands to +specify a foreground or background color for it, then it does not +inherit the @code{face} property from the preceding character; instead +it uses whatever you specified. It will still inherit other text +properties, though. + + Strictly speaking, these commands apply only to the first following +self-inserting character that you type. But if you insert additional +characters after it, they will inherit from the first one. So it +appears that these commands apply to all of them. + + Enriched mode defines two additional faces: @code{excerpt} and +@code{fixed}. These correspond to codes used in the text/enriched file +format. + + The @code{excerpt} face is intended for quotations. This face is the +same as @code{italic} unless you customize it (@pxref{Face Customization}). + + The @code{fixed} face means, ``Use a fixed-width font for this part +of the text.'' Applying the @code{fixed} face to a part of the text +will cause that part of the text to appear in a fixed-width font, even +if the default font is variable-width. This applies to Emacs and to +other systems that display text/enriched format. So if you +specifically want a certain part of the text to use a fixed-width +font, you should specify the @code{fixed} face for that part. + + By default, the @code{fixed} face looks the same as @code{bold}. +This is an attempt to distinguish it from @code{default}. You may +wish to customize @code{fixed} to some other fixed-width medium font. +@xref{Face Customization}. + + If your terminal cannot display different faces, you will not be +able to see them, but you can still edit documents containing faces, +and even add faces and colors to documents. The faces you specify +will be visible when the file is viewed on a terminal that can display +them. + +@node Format Colors +@subsection Colors in Formatted Text + + You can specify foreground and background colors for portions of the +text. There is a menu for specifying the foreground color and a menu +for specifying the background color. Each color menu lists all the +colors that you have used in Enriched mode in the current Emacs session. + + If you specify a color with a prefix argument---or, in Transient +Mark mode, if the region is not active---then it applies to any +immediately following self-inserting input. Otherwise, the command +applies to the region. + + Each color menu contains one additional item: @samp{Other}. You can use +this item to specify a color that is not listed in the menu; it reads +the color name with the minibuffer. To display a list of available colors +and their names, use the @samp{Display Colors} menu item in the Text +Properties menu (@pxref{Editing Format Info}). + + Any color that you specify in this way, or that is mentioned in a +formatted text file that you read in, is added to the corresponding +color menu for the duration of the Emacs session. + +@findex facemenu-set-foreground +@findex facemenu-set-background + There are no predefined key bindings for specifying colors, but you can do so +with the extended commands @kbd{M-x facemenu-set-foreground} and +@kbd{M-x facemenu-set-background}. Both of these commands read the name +of the color with the minibuffer. + +@node Format Indentation +@subsection Indentation in Formatted Text + + When editing formatted text, you can specify different amounts of +indentation for the right or left margin of an entire paragraph or a +part of a paragraph. The margins you specify automatically affect the +Emacs fill commands (@pxref{Filling}) and line-breaking commands. + + The Indentation submenu provides a convenient interface for specifying +these properties. The submenu contains four items: + +@table @code +@kindex C-x TAB @r{(Enriched mode)} +@findex increase-left-margin +@item Indent More +Indent the region by 4 columns (@code{increase-left-margin}). In +Enriched mode, this command is also available on @kbd{C-x @key{TAB}}; if +you supply a numeric argument, that says how many columns to add to the +margin (a negative argument reduces the number of columns). + +@item Indent Less +Remove 4 columns of indentation from the region. + +@item Indent Right More +Make the text narrower by indenting 4 columns at the right margin. + +@item Indent Right Less +Remove 4 columns of indentation from the right margin. +@end table + + You can use these commands repeatedly to increase or decrease the +indentation. + + The most common way to use them is to change the indentation of an +entire paragraph. For other uses, the effects of refilling can be +hard to predict, except in some special cases like the one described +next. + + The most common other use is to format paragraphs with @dfn{hanging +indents}, which means that the first line is indented less than +subsequent lines. To set up a hanging indent, increase the +indentation of the region starting after the first word of the +paragraph and running until the end of the paragraph. + + Indenting the first line of a paragraph is easier. Set the margin for +the whole paragraph where you want it to be for the body of the +paragraph, then indent the first line by inserting extra spaces or tabs. + +@vindex standard-indent + The variable @code{standard-indent} specifies how many columns these +commands should add to or subtract from the indentation. The default +value is 4. The overall default right margin for Enriched mode is +controlled by the variable @code{fill-column}, as usual. + +@kindex C-c [ @r{(Enriched mode)} +@kindex C-c ] @r{(Enriched mode)} +@findex set-left-margin +@findex set-right-margin + There are also two commands for setting the left or right margin of +the region absolutely: @code{set-left-margin} and +@code{set-right-margin}. Enriched mode binds these commands to +@kbd{C-c [} and @kbd{C-c ]}, respectively. You can specify the +margin width either with a numeric argument or in the minibuffer. + + Sometimes, as a result of editing, the filling of a paragraph becomes +messed up---parts of the paragraph may extend past the left or right +margins. When this happens, use @kbd{M-q} (@code{fill-paragraph}) to +refill the paragraph. + + The fill prefix, if any, works in addition to the specified paragraph +indentation: @kbd{C-x .} does not include the specified indentation's +whitespace in the new value for the fill prefix, and the fill commands +look for the fill prefix after the indentation on each line. @xref{Fill +Prefix}. + +@node Format Justification +@subsection Justification in Formatted Text + + When editing formatted text, you can specify various styles of +justification for a paragraph. The style you specify automatically +affects the Emacs fill commands. + + The Justification submenu provides a convenient interface for specifying +the style. The submenu contains five items: + +@table @code +@item Left +This is the most common style of justification (at least for English). +Lines are aligned at the left margin but left uneven at the right. + +@item Right +This aligns each line with the right margin. Spaces and tabs are added +on the left, if necessary, to make lines line up on the right. + +@item Full +This justifies the text, aligning both edges of each line. Justified +text looks very nice in a printed book, where the spaces can all be +adjusted equally, but it does not look as nice with a fixed-width font +on the screen. Perhaps a future version of Emacs will be able to adjust +the width of spaces in a line to achieve elegant justification. + +@item Center +This centers every line between the current margins. + +@item Unfilled +This turns off filling entirely. Each line will remain as you wrote it; +the fill and auto-fill functions will have no effect on text which has +this setting. You can, however, still indent the left margin. In +unfilled regions, all newlines are treated as hard newlines (@pxref{Hard +and Soft Newlines}) . +@end table + + In Enriched mode, you can also specify justification from the keyboard +using the @kbd{M-j} prefix character: + +@table @kbd +@kindex M-j l @r{(Enriched mode)} +@findex set-justification-left +@item M-j l +Make the region left-filled (@code{set-justification-left}). +@kindex M-j r @r{(Enriched mode)} +@findex set-justification-right +@item M-j r +Make the region right-filled (@code{set-justification-right}). +@kindex M-j b @r{(Enriched mode)} +@findex set-justification-full +@item M-j b +Make the region fully justified (@code{set-justification-full}). +@kindex M-j c @r{(Enriched mode)} +@kindex M-S @r{(Enriched mode)} +@findex set-justification-center +@item M-j c +@itemx M-S +Make the region centered (@code{set-justification-center}). +@kindex M-j u @r{(Enriched mode)} +@findex set-justification-none +@item M-j u +Make the region unfilled (@code{set-justification-none}). +@end table + + Justification styles apply to entire paragraphs. All the +justification-changing commands operate on the paragraph containing +point, or, if the region is active, on all paragraphs which overlap the +region. + +@vindex default-justification + The default justification style is specified by the variable +@code{default-justification}. Its value should be one of the symbols +@code{left}, @code{right}, @code{full}, @code{center}, or @code{none}. +This is a per-buffer variable. Setting the variable directly affects +only the current buffer. However, customizing it in a Custom buffer +sets (as always) the default value for buffers that do not override it. +@xref{Locals}, and @ref{Easy Customization}. + +@node Format Properties +@subsection Setting Other Text Properties + + The Special Properties menu lets you add or remove three other useful text +properties: @code{read-only}, @code{invisible} and @code{intangible}. +The @code{intangible} property disallows moving point within the text, +the @code{invisible} text property hides text from display, and the +@code{read-only} property disallows alteration of the text. + + Each of these special properties has a menu item to add it to the +region. The last menu item, @samp{Remove Special}, removes all of these +special properties from the text in the region. + + Currently, the @code{invisible} and @code{intangible} properties are +@emph{not} saved in the text/enriched format. The @code{read-only} +property is saved, but it is not a standard part of the text/enriched +format, so other editors may not respect it. + +@node Forcing Enriched Mode +@subsection Forcing Enriched Mode + + Normally, Emacs knows when you are editing formatted text because it +recognizes the special annotations used in the file that you visited. +However, sometimes you must take special actions to convert file +contents or turn on Enriched mode: + +@itemize @bullet +@item +When you visit a file that was created with some other editor, Emacs may +not recognize the file as being in the text/enriched format. In this +case, when you visit the file you will see the formatting commands +rather than the formatted text. Type @kbd{M-x format-decode-buffer} to +translate it. This also automatically turns on Enriched mode. + +@item +When you @emph{insert} a file into a buffer, rather than visiting it, +Emacs does the necessary conversions on the text which you insert, but +it does not enable Enriched mode. If you wish to do that, type @kbd{M-x +enriched-mode}. +@end itemize + + The command @code{format-decode-buffer} translates text in various +formats into Emacs's internal format. It asks you to specify the format +to translate from; however, normally you can type just @key{RET}, which +tells Emacs to guess the format. + +@findex format-find-file + If you wish to look at a text/enriched file in its raw form, as a +sequence of characters rather than as formatted text, use the @kbd{M-x +find-file-literally} command. This visits a file, like +@code{find-file}, but does not do format conversion. It also inhibits +character code conversion (@pxref{Coding Systems}) and automatic +uncompression (@pxref{Compressed Files}). To disable format conversion +but allow character code conversion and/or automatic uncompression if +appropriate, use @code{format-find-file} with suitable arguments. + +@node Text Based Tables +@section Editing Text-based Tables +@cindex table mode +@cindex text-based tables + + Table mode provides an easy and intuitive way to create and edit WYSIWYG +text-based tables. Here is an example of such a table: + +@smallexample +@group ++-----------------+--------------------------------+-----------------+ +| Command | Description | Key Binding | ++-----------------+--------------------------------+-----------------+ +| forward-char |Move point right N characters | C-f | +| |(left if N is negative). | | +| | | | +| |On reaching end of buffer, stop | | +| |and signal error. | | ++-----------------+--------------------------------+-----------------+ +| backward-char |Move point left N characters | C-b | +| |(right if N is negative). | | +| | | | +| |On attempt to pass beginning or | | +| |end of buffer, stop and signal | | +| |error. | | ++-----------------+--------------------------------+-----------------+ +@end group +@end smallexample + + Table mode allows the contents of the table such as this one to be +easily manipulated by inserting or deleting characters inside a cell. +A cell is effectively a localized rectangular edit region and edits to +a cell do not affect the contents of the surrounding cells. If the +contents do not fit into a cell, then the cell is automatically +expanded in the vertical and/or horizontal directions and the rest of +the table is restructured and reformatted in accordance with the +growth of the cell. + +@menu +* Table Definition:: What is a text based table. +* Table Creation:: How to create a table. +* Table Recognition:: How to activate and deactivate tables. +* Cell Commands:: Cell-oriented commands in a table. +* Cell Justification:: Justifying cell contents. +* Row Commands:: Manipulating rows of table cell. +* Column Commands:: Manipulating columns of table cell. +* Fixed Width Mode:: Fixing cell width. +* Table Conversion:: Converting between plain text and tables. +* Measuring Tables:: Analyzing table dimension. +* Table Misc:: Table miscellany. +@end menu + +@node Table Definition +@subsection What is a Text-based Table? + + Keep the following examples of valid tables in mind as a reference +while you read this section: + +@example + +--+----+---+ +-+ +--+-----+ + | | | | | | | | | + +--+----+---+ +-+ | +--+--+ + | | | | | | | | + +--+----+---+ +--+--+ | + | | | + +-----+--+ +@end example + + A table consists of a rectangular frame whose inside is divided into +cells. Each cell must be at least one character wide and one +character high, not counting its border lines. A cell can be +subdivided into multiple rectangular cells, but cells cannot overlap. + + The table frame and cell border lines are made of three special +characters. These variables specify those characters: + +@table @code +@vindex table-cell-vertical-char +@item table-cell-vertical-char +Holds the character used for vertical lines. The default value is +@samp{|}. + +@vindex table-cell-horizontal-char +@item table-cell-horizontal-char +Holds the character used for horizontal lines. The default value is +@samp{-}. + +@vindex table-cell-intersection-char +@item table-cell-intersection-char +Holds the character used at where horizontal line and vertical line +meet. The default value is @samp{+}. +@end table + +@noindent +Based on this definition, the following five tables are examples of invalid +tables: + +@example + +-----+ +-----+ +--+ +-++--+ ++ + | | | | | | | || | ++ + | +-+ | | | | | | || | + | | | | +--+ | +--+--+ +-++--+ + | +-+ | | | | | | | +-++--+ + | | | | | | | | | || | + +-----+ +--+--+ +--+--+ +-++--+ + a b c d e +@end example + +From left to right: + +@enumerate a +@item +Overlapped cells or non-rectangular cells are not allowed. +@item +Same as a. +@item +The border must be rectangular. +@item +Cells must have a minimum width/height of one character. +@item +Same as d. +@end enumerate + +@node Table Creation +@subsection How to Create a Table? +@cindex create a text-based table +@cindex table creation + +@findex table-insert + The command to create a table is @code{table-insert}. When called +interactively, it asks for the number of columns, number of rows, cell +width and cell height. The number of columns is the number of cells +horizontally side by side. The number of rows is the number of cells +vertically within the table's height. The cell width is a number of +characters that each cell holds, left to right. The cell height is a +number of lines each cell holds. The cell width and the cell height +can be either an integer (when the value is constant across the table) +or a series of integer, separated by spaces or commas, where each +number corresponds to the next cell within a row from left to right, +or the next cell within a column from top to bottom. + +@node Table Recognition +@subsection Table Recognition +@cindex table recognition + +@findex table-recognize +@findex table-unrecognize + Table mode maintains special text properties in the buffer to allow +editing in a convenient fashion. When a buffer with tables is saved +to its file, these text properties are lost, so when you visit this +file again later, Emacs does not see a table, but just formatted text. +To resurrect the table text properties, issue the @kbd{M-x +table-recognize} command. It scans the current buffer, recognizes +valid table cells, and attaches appropriate text properties to allow +for table editing. The converse command, @code{table-unrecognize}, is +used to remove the special text properties and convert the buffer back +to plain text. + + Special commands exist to enable or disable tables within a region, +enable or disable individual tables, and enable/disable individual +cells. These commands are: + +@table @kbd +@findex table-recognize-region +@item M-x table-recognize-region +Recognize tables within the current region and activate them. +@findex table-unrecognize-region +@item M-x table-unrecognize-region +Deactivate tables within the current region. +@findex table-recognize-table +@item M-x table-recognize-table +Recognize the table under point and activate it. +@findex table-unrecognize-table +@item M-x table-unrecognize-table +Deactivate the table under point. +@findex table-recognize-cell +@item M-x table-recognize-cell +Recognize the cell under point and activate it. +@findex table-unrecognize-cell +@item M-x table-unrecognize-cell +Deactivate the cell under point. +@end table + + For another way of converting text into tables, see @ref{Table +Conversion}. + +@node Cell Commands +@subsection Commands for Table Cells + +@findex table-forward-cell +@findex table-backward-cell + The commands @code{table-forward-cell} and +@code{table-backward-cell} move point from the current cell to an +adjacent cell forward and backward respectively. The order of the +cells is cyclic: when point is in the last cell of a table, typing +@kbd{M-x table-forward-cell} moves to the first cell in the table. +Likewise @kbd{M-x table-backward-cell} from the first cell in a table +moves to the last cell. + +@findex table-span-cell + The command @code{table-span-cell} merges the current cell with the +adjacent cell in a specified direction---right, left, above or below. +You specify the direction with the minibuffer. It does not allow +merges which don't result in a legitimate cell layout. + +@findex table-split-cell +@cindex text-based tables, split a cell +@cindex split table cell + The command @code{table-split-cell} splits the current cell +vertically or horizontally. This command is a wrapper to the +direction specific commands @code{table-split-cell-vertically} and +@code{table-split-cell-horizontally}. You specify the direction with +a minibuffer argument. + +@findex table-split-cell-vertically + The command @code{table-split-cell-vertically} splits the current +cell vertically and creates a pair of cells above and below where +point is located. The content in the original cell is split as well. + +@findex table-split-cell-horizontally + The command @code{table-split-cell-horizontally} splits the current +cell horizontally and creates a pair of cells right and left of where +point is located. If the cell being split is not empty, this asks you +how to handle the cell contents. The three options are: @code{split}, +@code{left}, or @code{right}. @code{split} splits the contents at +point literally, while the @code{left} and @code{right} options move +the entire contents into the left or right cell respectively. + +@cindex enlarge a table cell +@cindex shrink a table cell + The next four commands enlarge or shrink a cell. They use numeric +arguments (@pxref{Arguments}) to specify how many columns or rows to +enlarge or shrink a particular table. + +@table @kbd +@findex table-heighten-cell +@item M-x table-heighten-cell +Enlarge the current cell vertically. +@findex table-shorten-cell +@item M-x table-shorten-cell +Shrink the current cell vertically. +@findex table-widen-cell +@item M-x table-widen-cell +Enlarge the current cell horizontally. +@findex table-narrow-cell +@item M-x table-narrow-cell +Shrink the current cell horizontally. +@end table + +@node Cell Justification +@subsection Cell Justification +@cindex cell text justification + + You can specify text justification for each cell. The justification +is remembered independently for each cell and the subsequent editing +of cell contents is subject to the specified justification. + +@findex table-justify + The command @code{table-justify} ask you to specify what to justify: +a cell, a column, or a row. If you select cell justification, this +command sets the justification only for the current cell. Selecting +column or row justification sets the justification for all the cells +within a column or row respectively. The command then ask you which +kind of justification to apply: @code{left}, @code{center}, +@code{right}, @code{top}, @code{middle}, @code{bottom}, or +@code{none}. Horizontal justification and vertical justification are +specified independently. The options @code{left}, @code{center}, and +@code{right} specify horizontal justification while the options +@code{top}, @code{middle}, @code{bottom}, and @code{none} specify +vertical justification. The vertical justification @code{none} +effectively removes vertical justification. Horizontal justification +must be one of @code{left}, @code{center}, or @code{right}. + +@vindex table-detect-cell-alignment + Justification information is stored in the buffer as a part of text +property. Therefore, this information is ephemeral and does not +survive through the loss of the buffer (closing the buffer and +revisiting the buffer erase any previous text properties). To +countermand for this, the command @code{table-recognize} and other +recognition commands (@pxref{Table Recognition}) are equipped with a +convenience feature (turned on by default). During table recognition, +the contents of a cell are examined to determine which justification +was originally applied to the cell and then applies this justification +to the cell. This is a speculative algorithm and is therefore not +perfect, however, the justification is deduced correctly most of the +time. To disable this feature, customize the variable +@code{table-detect-cell-alignment} and set it to @code{nil}. + +@node Row Commands +@subsection Commands for Table Rows +@cindex table row commands + +@cindex insert row in table +@findex table-insert-row + The command @code{table-insert-row} inserts a row of cells before +the current row in a table. The current row where point is located is +pushed down after the newly inserted row. A numeric prefix argument +specifies the number of rows to insert. Note that in order to insert +rows @emph{after} the last row at the bottom of a table, you must +place point below the table---that is, outside the table---prior to +invoking this command. + +@cindex delete row in table +@findex table-delete-row + The command @code{table-delete-row} deletes a row of cells at point. +A numeric prefix argument specifies the number of rows to delete. + +@node Column Commands +@subsection Commands for Table Columns +@cindex table column commands + +@cindex insert column in table +@findex table-insert-column + The command @code{table-insert-column} inserts a column of cells to +the left of the current row in a table. This pushes the current +column to the right. To insert a column to the right side of the +rightmost column, place point to the right of the rightmost column, +which is outside of the table, prior to invoking this command. A +numeric prefix argument specifies the number of columns to insert. + +@cindex delete column in table + A command @code{table-delete-column} deletes a column of cells at +point. A numeric prefix argument specifies the number of columns to +delete. + +@node Fixed Width Mode +@subsection Fix Width of Cells +@cindex fix width of table cells + +@findex table-fixed-width-mode + The command @code{table-fixed-width-mode} toggles fixed width mode +on and off. When fixed width mode is turned on, editing inside a +cell never changes the cell width; when it is off, the cell width +expands automatically in order to prevent a word from being folded +into multiple lines. By default, fixed width mode is disabled. + +@node Table Conversion +@subsection Conversion Between Plain Text and Tables +@cindex text to table +@cindex table to text + +@findex table-capture + The command @code{table-capture} captures plain text in a region and +turns it into a table. Unlike @code{table-recognize} (@pxref{Table +Recognition}), the original text does not have a table appearance but +may hold a logical table structure. For example, some elements +separated by known patterns form a two dimensional structure which can +be turned into a table. + + Here's an example of data that @code{table-capture} can operate on. +The numbers are horizontally separated by a comma and vertically +separated by a newline character. + +@example +1, 2, 3, 4 +5, 6, 7, 8 +, 9, 10 +@end example + +@noindent +Invoking @kbd{M-x table-capture} on that text produces this table: + +@example ++-----+-----+-----+-----+ +|1 |2 |3 |4 | ++-----+-----+-----+-----+ +|5 |6 |7 |8 | ++-----+-----+-----+-----+ +| |9 |10 | | ++-----+-----+-----+-----+ +@end example + +@noindent +The conversion uses @samp{,} for the column delimiter and newline for +a row delimiter, cells are left justified, and minimum cell width is +5. + +@findex table-release + The command @code{table-release} does the opposite of +@code{table-capture}. It releases a table by removing the table frame +and cell borders. This leaves the table contents as plain text. One +of the useful applications of @code{table-capture} and +@code{table-release} is to edit a text in layout. Look at the +following three paragraphs (the latter two are indented with header +lines): + +@example +@samp{table-capture} is a powerful command, but mastering its +power requires some practice. Here are some things it can do: + +Parse Cell Items By using column delimiter regular + expression and raw delimiter regular + expression, it parses the specified text + area and extracts cell items from + non-table text and then forms a table out + of them. + +Capture Text Area When no delimiters are specified it + creates a single cell table. The text in + the specified region is placed in that + cell. +@end example + +@noindent +Applying @code{table-capture} to a region containing the above three +paragraphs, with empty strings for column delimiter regexp and row +delimiter regexp, creates a table with a single cell like the +following one. + +@c The first line's right-hand frame in the following two examples +@c sticks out to accommodate for the removal of @samp in the +@c produced output!! +@smallexample +@group ++-----------------------------------------------------------------+ +|@samp{table-capture} is a powerful command, but mastering its | +|power requires some practice. Here are some things it can do: | +| | +|Parse Cell Items By using column delimiter regular | +| expression and raw delimiter regular | +| expression, it parses the specified text | +| area and extracts cell items from | +| non-table text and then forms a table out | +| of them. | +| | +|Capture Text Area When no delimiters are specified it | +| creates a single cell table. The text in | +| the specified region is placed in that | +| cell. | ++-----------------------------------------------------------------+ +@end group +@end smallexample + +@noindent +By splitting the cell appropriately we now have a table consisting of +paragraphs occupying its own cell. Each cell can now be edited +independently without affecting the layout of other cells. + +@smallexample ++-----------------------------------------------------------------+ +|@samp{table-capture} is a powerful command, but mastering its | +|power requires some practice. Here are some things it can do: | ++---------------------+-------------------------------------------+ +|Parse Cell Items |By using column delimiter regular | +| |expression and raw delimiter regular | +| |expression, it parses the specified text | +| |area and extracts cell items from | +| |non-table text and then forms a table out | +| |of them. | ++---------------------+-------------------------------------------+ +|Capture Text Area |When no delimiters are specified it | +| |creates a single cell table. The text in | +| |the specified region is placed in that | +| |cell. | ++---------------------+-------------------------------------------+ +@end smallexample + +@noindent +By applying @code{table-release}, which does the opposite process, the +contents become once again plain text. @code{table-release} works as +a companion command to @code{table-capture}. + +@node Measuring Tables +@subsection Analyzing Table Dimensions +@cindex table dimensions + +@findex table-query-dimension + The command @code{table-query-dimension} analyzes a table structure +and reports information regarding its dimensions. In case of the +above example table, the @code{table-query-dimension} command displays +in echo area: + +@smallexample +Cell: (21w, 6h), Table: (67w, 16h), Dim: (2c, 3r), Total Cells: 5 +@end smallexample + +@noindent +This indicates that the current cell is 21 character wide and 6 lines +high, the entire table is 67 characters wide and 16 lines high. The +table has 2 columns and 3 rows. It has a total of 5 cells, since the +first row has a spanned cell. + +@node Table Misc +@subsection Table Miscellany + +@cindex insert string into table cells +@findex table-insert-sequence + The command @code{table-insert-sequence} inserts a string into each +cell. Each string is a part of a sequence i.e.@: a series of +increasing integer numbers. + +@cindex table in language format +@cindex table for HTML and LaTeX +@findex table-generate-source + The command @code{table-generate-source} generates a table formatted +for a specific markup language. It asks for a language (which must be +one of @code{html}, @code{latex}, or @code{cals}), a destination +buffer where to put the result, and the table caption (a string), and +then inserts the generated table in the proper syntax into the +destination buffer. The default destination buffer is +@code{table.@var{lang}}, where @var{lang} is the language you +specified. + +@ignore + arch-tag: 8db54ed8-2036-49ca-b0df-23811d03dc70 +@end ignore diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi new file mode 100644 index 00000000000..ea494445a4e --- /dev/null +++ b/doc/emacs/trouble.texi @@ -0,0 +1,1066 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2001, 2002, +@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@iftex +@chapter Dealing with Common Problems + + If you type an Emacs command you did not intend, the results are often +mysterious. This chapter tells what you can do to cancel your mistake or +recover from a mysterious situation. Emacs bugs and system crashes are +also considered. +@end iftex + +@ifnottex +@raisesections +@end ifnottex + +@node Quitting, Lossage, Customization, Top +@section Quitting and Aborting +@cindex quitting + +@table @kbd +@item C-g +@itemx C-@key{BREAK} @r{(MS-DOS only)} +Quit: cancel running or partially typed command. +@item C-] +Abort innermost recursive editing level and cancel the command which +invoked it (@code{abort-recursive-edit}). +@item @key{ESC} @key{ESC} @key{ESC} +Either quit or abort, whichever makes sense (@code{keyboard-escape-quit}). +@item M-x top-level +Abort all recursive editing levels that are currently executing. +@item C-x u +Cancel a previously made change in the buffer contents (@code{undo}). +@end table + + There are two ways of canceling a command before it has finished: +@dfn{quitting} with @kbd{C-g}, and @dfn{aborting} with @kbd{C-]} or +@kbd{M-x top-level}. Quitting cancels a partially typed command, or +one which is still running. Aborting exits a recursive editing level +and cancels the command that invoked the recursive edit. +(@xref{Recursive Edit}.) + +@cindex quitting +@kindex C-g + Quitting with @kbd{C-g} is the way to get rid of a partially typed +command, or a numeric argument that you don't want. It also stops a +running command in the middle in a relatively safe way, so you can use +it if you accidentally give a command which takes a long time. In +particular, it is safe to quit out of a kill command; either your text +will @emph{all} still be in the buffer, or it will @emph{all} be in +the kill ring, or maybe both. Quitting an incremental search does +special things, documented under searching; it may take two successive +@kbd{C-g} characters to get out of a search (@pxref{Incremental +Search}). + + On MS-DOS, the character @kbd{C-@key{BREAK}} serves as a quit character +like @kbd{C-g}. The reason is that it is not feasible, on MS-DOS, to +recognize @kbd{C-g} while a command is running, between interactions +with the user. By contrast, it @emph{is} feasible to recognize +@kbd{C-@key{BREAK}} at all times. +@iftex +@xref{MS-DOS Keyboard,,,emacs-xtra, Specialized Emacs Features}. +@end iftex +@ifnottex +@xref{MS-DOS Keyboard}. +@end ifnottex + + +@findex keyboard-quit + @kbd{C-g} works by setting the variable @code{quit-flag} to @code{t} +the instant @kbd{C-g} is typed; Emacs Lisp checks this variable +frequently, and quits if it is non-@code{nil}. @kbd{C-g} is only +actually executed as a command if you type it while Emacs is waiting for +input. In that case, the command it runs is @code{keyboard-quit}. + + On a text terminal, if you quit with @kbd{C-g} a second time before +the first @kbd{C-g} is recognized, you activate the ``emergency +escape'' feature and return to the shell. @xref{Emergency Escape}. + +@cindex NFS and quitting + There are some situations where you cannot quit. When Emacs is +waiting for the operating system to do something, quitting is +impossible unless special pains are taken for the particular system +call within Emacs where the waiting occurs. We have done this for the +system calls that users are likely to want to quit from, but it's +possible you will a case not handled. In one very common +case---waiting for file input or output using NFS---Emacs itself knows +how to quit, but many NFS implementations simply do not allow user +programs to stop waiting for NFS when the NFS server is hung. + +@cindex aborting recursive edit +@findex abort-recursive-edit +@kindex C-] + Aborting with @kbd{C-]} (@code{abort-recursive-edit}) is used to get +out of a recursive editing level and cancel the command which invoked +it. Quitting with @kbd{C-g} does not do this, and could not do this, +because it is used to cancel a partially typed command @emph{within} the +recursive editing level. Both operations are useful. For example, if +you are in a recursive edit and type @kbd{C-u 8} to enter a numeric +argument, you can cancel that argument with @kbd{C-g} and remain in the +recursive edit. + +@findex keyboard-escape-quit +@kindex ESC ESC ESC + The sequence @kbd{@key{ESC} @key{ESC} @key{ESC}} +(@code{keyboard-escape-quit}) can either quit or abort. (We defined +it this way because @key{ESC} means ``get out'' in many PC programs.) +It can cancel a prefix argument, clear a selected region, or get out +of a Query Replace, like @kbd{C-g}. It can get out of the minibuffer +or a recursive edit, like @kbd{C-]}. It can also get out of splitting +the frame into multiple windows, as with @kbd{C-x 1}. One thing it +cannot do, however, is stop a command that is running. That's because +it executes as an ordinary command, and Emacs doesn't notice it until +it is ready for the next command. + +@findex top-level + The command @kbd{M-x top-level} is equivalent to ``enough'' @kbd{C-]} +commands to get you out of all the levels of recursive edits that you +are in. @kbd{C-]} gets you out one level at a time, but @kbd{M-x +top-level} goes out all levels at once. Both @kbd{C-]} and @kbd{M-x +top-level} are like all other commands, and unlike @kbd{C-g}, in that +they take effect only when Emacs is ready for a command. @kbd{C-]} is +an ordinary key and has its meaning only because of its binding in the +keymap. @xref{Recursive Edit}. + + @kbd{C-x u} (@code{undo}) is not strictly speaking a way of canceling +a command, but you can think of it as canceling a command that already +finished executing. @xref{Undo}, for more information +about the undo facility. + +@node Lossage, Bugs, Quitting, Top +@section Dealing with Emacs Trouble + + This section describes various conditions in which Emacs fails to work +normally, and how to recognize them and correct them. For a list of +additional problems you might encounter, see @ref{Bugs and problems, , +Bugs and problems, efaq, GNU Emacs FAQ}, and the file @file{etc/PROBLEMS} +in the Emacs distribution. Type @kbd{C-h C-f} to read the FAQ; type +@kbd{C-h C-e} to read the @file{PROBLEMS} file. + +@menu +* DEL Does Not Delete:: What to do if @key{DEL} doesn't delete. +* Stuck Recursive:: `[...]' in mode line around the parentheses. +* Screen Garbled:: Garbage on the screen. +* Text Garbled:: Garbage in the text. +* Memory Full:: How to cope when you run out of memory. +* After a Crash:: Recovering editing in an Emacs session that crashed. +* Emergency Escape:: Emergency escape--- + What to do if Emacs stops responding. +* Total Frustration:: When you are at your wits' end. +@end menu + +@node DEL Does Not Delete +@subsection If @key{DEL} Fails to Delete +@cindex @key{DEL} vs @key{BACKSPACE} +@cindex @key{BACKSPACE} vs @key{DEL} +@cindex usual erasure key + + Every keyboard has a large key, a little ways above the @key{RET} or +@key{ENTER} key, which you normally use outside Emacs to erase the +last character that you typed. We call this key @dfn{the usual +erasure key}. In Emacs, it is supposed to be equivalent to @key{DEL}, +and when Emacs is properly configured for your terminal, it translates +that key into the character @key{DEL}. + + When Emacs starts up on a graphical display, it determines +automatically which key should be @key{DEL}. In some unusual cases +Emacs gets the wrong information from the system. If the usual +erasure key deletes forwards instead of backwards, that is probably +what happened---Emacs ought to be treating the @key{DELETE} key as +@key{DEL}, but it isn't. + + On a graphical display, if the usual erasure key is labeled +@key{BACKSPACE} and there is a @key{DELETE} key elsewhere, but the +@key{DELETE} key deletes backward instead of forward, that too +suggests Emacs got the wrong information---but in the opposite sense. +It ought to be treating the @key{BACKSPACE} key as @key{DEL}, and +treating @key{DELETE} differently, but it isn't. + + On a text-only terminal, if you find the usual erasure key prompts +for a Help command, like @kbd{Control-h}, instead of deleting a +character, it means that key is actually sending the @key{BS} +character. Emacs ought to be treating @key{BS} as @key{DEL}, but it +isn't. + + In all of those cases, the immediate remedy is the same: use the +command @kbd{M-x normal-erase-is-backspace-mode}. This toggles +between the two modes that Emacs supports for handling @key{DEL}, so +if Emacs starts in the wrong mode, this should switch to the right +mode. On a text-only terminal, if you want to ask for help when +@key{BS} is treated as @key{DEL}, use @key{F1}; @kbd{C-?} may also +work, if it sends character code 127. + +@findex normal-erase-is-backspace-mode + To fix the problem automatically for every Emacs session, you can +put one of the following lines into your @file{.emacs} file +(@pxref{Init File}). For the first case above, where @key{DELETE} +deletes forwards instead of backwards, use this line to make +@key{DELETE} act as @key{DEL} (resulting in behavior compatible +with Emacs 20 and previous versions): + +@lisp +(normal-erase-is-backspace-mode 0) +@end lisp + +@noindent +For the other two cases, where @key{BACKSPACE} ought to act as +@key{DEL}, use this line: + +@lisp +(normal-erase-is-backspace-mode 1) +@end lisp + +@vindex normal-erase-is-backspace + Another way to fix the problem for every Emacs session is to +customize the variable @code{normal-erase-is-backspace}: the value +@code{t} specifies the mode where @key{BS} or @key{BACKSPACE} is +@key{DEL}, and @code{nil} specifies the other mode. @xref{Easy +Customization}. + + On a graphical display, it can also happen that the usual erasure key +is labeled @key{BACKSPACE}, there is a @key{DELETE} key elsewhere, and +both keys delete forward. This probably means that someone has +redefined your @key{BACKSPACE} key as a @key{DELETE} key. With X, +this is typically done with a command to the @code{xmodmap} program +when you start the server or log in. The most likely motive for this +customization was to support old versions of Emacs, so we recommend +you simply remove it now. + +@node Stuck Recursive +@subsection Recursive Editing Levels + + Recursive editing levels are important and useful features of Emacs, but +they can seem like malfunctions if you do not understand them. + + If the mode line has square brackets @samp{[@dots{}]} around the parentheses +that contain the names of the major and minor modes, you have entered a +recursive editing level. If you did not do this on purpose, or if you +don't understand what that means, you should just get out of the recursive +editing level. To do so, type @kbd{M-x top-level}. This is called getting +back to top level. @xref{Recursive Edit}. + +@node Screen Garbled +@subsection Garbage on the Screen + + If the text on a text terminal looks wrong, the first thing to do is +see whether it is wrong in the buffer. Type @kbd{C-l} to redisplay +the entire screen. If the screen appears correct after this, the +problem was entirely in the previous screen update. (Otherwise, see +the following section.) + + Display updating problems often result from an incorrect terminfo +entry for the terminal you are using. The file @file{etc/TERMS} in +the Emacs distribution gives the fixes for known problems of this +sort. @file{INSTALL} contains general advice for these problems in +one of its sections. To investigate the possibility that you have +this sort of problem, try Emacs on another terminal made by a +different manufacturer. If problems happen frequently on one kind of +terminal but not another kind, it is likely to be a bad terminfo entry, +though it could also be due to a bug in Emacs that appears for +terminals that have or that lack specific features. + +@node Text Garbled +@subsection Garbage in the Text + + If @kbd{C-l} shows that the text is wrong, first type @kbd{C-h l} to +see what commands you typed to produce the observed results. Then try +undoing the changes step by step using @kbd{C-x u}, until it gets back +to a state you consider correct. + + If a large portion of text appears to be missing at the beginning or +end of the buffer, check for the word @samp{Narrow} in the mode line. +If it appears, the text you don't see is probably still present, but +temporarily off-limits. To make it accessible again, type @kbd{C-x n +w}. @xref{Narrowing}. + +@node Memory Full +@subsection Running out of Memory +@cindex memory full +@cindex out of memory + + If you get the error message @samp{Virtual memory exceeded}, save +your modified buffers with @kbd{C-x s}. This method of saving them +has the smallest need for additional memory. Emacs keeps a reserve of +memory which it makes available when this error happens; that should +be enough to enable @kbd{C-x s} to complete its work. When the +reserve has been used, @samp{!MEM FULL!} appears at the beginning of +the mode line, indicating there is no more reserve. + + Once you have saved your modified buffers, you can exit this Emacs +session and start another, or you can use @kbd{M-x kill-some-buffers} +to free space in the current Emacs job. If this frees up sufficient +space, Emacs will refill its memory reserve, and @samp{!MEM FULL!} +will disappear from the mode line. That means you can safely go on +editing in the same Emacs session. + + Do not use @kbd{M-x buffer-menu} to save or kill buffers when you run +out of memory, because the buffer menu needs a fair amount of memory +itself, and the reserve supply may not be enough. + +@node After a Crash +@subsection Recovery After a Crash + + If Emacs or the computer crashes, you can recover the files you were +editing at the time of the crash from their auto-save files. To do +this, start Emacs again and type the command @kbd{M-x recover-session}. + + This command initially displays a buffer which lists interrupted +session files, each with its date. You must choose which session to +recover from. Typically the one you want is the most recent one. Move +point to the one you choose, and type @kbd{C-c C-c}. + + Then @code{recover-session} considers each of the files that you +were editing during that session; for each such file, it asks whether +to recover that file. If you answer @kbd{y} for a file, it shows the +dates of that file and its auto-save file, then asks once again +whether to recover that file. For the second question, you must +confirm with @kbd{yes}. If you do, Emacs visits the file but gets the +text from the auto-save file. + + When @code{recover-session} is done, the files you've chosen to +recover are present in Emacs buffers. You should then save them. Only +this---saving them---updates the files themselves. + + As a last resort, if you had buffers with content which were not +associated with any files, or if the autosave was not recent enough to +have recorded important changes, you can use the +@file{etc/emacs-buffer.gdb} script with GDB (the GNU Debugger) to +retrieve them from a core dump--provided that a core dump was saved, +and that the Emacs executable was not stripped of its debugging +symbols. + + As soon as you get the core dump, rename it to another name such as +@file{core.emacs}, so that another crash won't overwrite it. + + To use this script, run @code{gdb} with the file name of your Emacs +executable and the file name of the core dump, e.g. @samp{gdb +/usr/bin/emacs core.emacs}. At the @code{(gdb)} prompt, load the +recovery script: @samp{source /usr/src/emacs/etc/emacs-buffer.gdb}. +Then type the command @code{ybuffer-list} to see which buffers are +available. For each buffer, it lists a buffer number. To save a +buffer, use @code{ysave-buffer}; you specify the buffer number, and +the file name to write that buffer into. You should use a file name +which does not already exist; if the file does exist, the script does +not make a backup of its old contents. + +@node Emergency Escape +@subsection Emergency Escape + + On text-only terminals, the @dfn{emergency escape} feature suspends +Emacs immediately if you type @kbd{C-g} a second time before Emacs can +actually respond to the first one by quitting. This is so you can +always get out of GNU Emacs no matter how badly it might be hung. +When things are working properly, Emacs recognizes and handles the +first @kbd{C-g} so fast that the second one won't trigger emergency +escape. However, if some problem prevents Emacs from handling the +first @kbd{C-g} properly, then the second one will get you back to the +shell. + + When you resume Emacs after a suspension caused by emergency escape, +it asks two questions before going back to what it had been doing: + +@example +Auto-save? (y or n) +Abort (and dump core)? (y or n) +@end example + +@noindent +Answer each one with @kbd{y} or @kbd{n} followed by @key{RET}. + + Saying @kbd{y} to @samp{Auto-save?} causes immediate auto-saving of +all modified buffers in which auto-saving is enabled. Saying @kbd{n} +skips this. + + Saying @kbd{y} to @samp{Abort (and dump core)?} causes Emacs to +crash, dumping core. This is to enable a wizard to figure out why +Emacs was failing to quit in the first place. Execution does not +continue after a core dump. + + If you answer this question @kbd{n}, Emacs execution resumes. With +luck, Emacs will ultimately do the requested quit. If not, each +subsequent @kbd{C-g} invokes emergency escape again. + + If Emacs is not really hung, just slow, you may invoke the double +@kbd{C-g} feature without really meaning to. Then just resume and +answer @kbd{n} to both questions, and you will get back to the former +state. The quit you requested will happen by and by. + + Emergency escape is active only for text terminals. On graphical +displays, you can use the mouse to kill Emacs or switch to another +program. + + On MS-DOS, you must type @kbd{C-@key{BREAK}} (twice) to cause +emergency escape---but there are cases where it won't work, when +system call hangs or when Emacs is stuck in a tight loop in C code. + +@node Total Frustration +@subsection Help for Total Frustration +@cindex Eliza +@cindex doctor + + If using Emacs (or something else) becomes terribly frustrating and none +of the techniques described above solve the problem, Emacs can still help +you. + + First, if the Emacs you are using is not responding to commands, type +@kbd{C-g C-g} to get out of it and then start a new one. + +@findex doctor + Second, type @kbd{M-x doctor @key{RET}}. + + The Emacs psychotherapist will help you feel better. Each time you +say something to the psychotherapist, you must end it by typing +@key{RET} @key{RET}. This indicates you are finished typing. + +@node Bugs, Contributing, Lossage, Top +@section Reporting Bugs + +@cindex bugs + Sometimes you will encounter a bug in Emacs. Although we cannot +promise we can or will fix the bug, and we might not even agree that it +is a bug, we want to hear about problems you encounter. Often we agree +they are bugs and want to fix them. + + To make it possible for us to fix a bug, you must report it. In order +to do so effectively, you must know when and how to do it. + + Before reporting a bug, it is a good idea to see if it is already +known. You can find the list of known problems in the file +@file{etc/PROBLEMS} in the Emacs distribution; type @kbd{C-h C-e} to read +it. Some additional user-level problems can be found in @ref{Bugs and +problems, , Bugs and problems, efaq, GNU Emacs FAQ}. Looking up your +problem in these two documents might provide you with a solution or a +work-around, or give you additional information about related issues. + +@menu +* Criteria: Bug Criteria. Have you really found a bug? +* Understanding Bug Reporting:: How to report a bug effectively. +* Checklist:: Steps to follow for a good bug report. +* Sending Patches:: How to send a patch for GNU Emacs. +@end menu + +@node Bug Criteria +@subsection When Is There a Bug + + If Emacs accesses an invalid memory location (``segmentation +fault''), or exits with an operating system error message that +indicates a problem in the program (as opposed to something like +``disk full''), then it is certainly a bug. + + If Emacs updates the display in a way that does not correspond to what is +in the buffer, then it is certainly a bug. If a command seems to do the +wrong thing but the problem corrects itself if you type @kbd{C-l}, it is a +case of incorrect display updating. + + Taking forever to complete a command can be a bug, but you must make +certain that it was really Emacs's fault. Some commands simply take a +long time. Type @kbd{C-g} (@kbd{C-@key{BREAK}} on MS-DOS) and then @kbd{C-h l} +to see whether the input Emacs received was what you intended to type; +if the input was such that you @emph{know} it should have been processed +quickly, report a bug. If you don't know whether the command should +take a long time, find out by looking in the manual or by asking for +assistance. + + If a command you are familiar with causes an Emacs error message in a +case where its usual definition ought to be reasonable, it is probably a +bug. + + If a command does the wrong thing, that is a bug. But be sure you know +for certain what it ought to have done. If you aren't familiar with the +command, or don't know for certain how the command is supposed to work, +then it might actually be working right. Rather than jumping to +conclusions, show the problem to someone who knows for certain. + + Finally, a command's intended definition may not be the best +possible definition for editing with. This is a very important sort +of problem, but it is also a matter of judgment. Also, it is easy to +come to such a conclusion out of ignorance of some of the existing +features. It is probably best not to complain about such a problem +until you have checked the documentation in the usual ways, feel +confident that you understand it, and know for certain that what you +want is not available. Ask other Emacs users, too. If you are not +sure what the command is supposed to do after a careful reading of the +manual, check the index and glossary for any terms that may be +unclear. + + If after careful rereading of the manual you still do not understand +what the command should do, that indicates a bug in the manual, which +you should report. The manual's job is to make everything clear to +people who are not Emacs experts---including you. It is just as +important to report documentation bugs as program bugs. + + If the on-line documentation string of a function or variable disagrees +with the manual, one of them must be wrong; that is a bug. + +@node Understanding Bug Reporting +@subsection Understanding Bug Reporting + +@findex emacs-version + When you decide that there is a bug, it is important to report it and to +report it in a way which is useful. What is most useful is an exact +description of what commands you type, starting with the shell command to +run Emacs, until the problem happens. + + The most important principle in reporting a bug is to report +@emph{facts}. Hypotheses and verbal descriptions are no substitute for +the detailed raw data. Reporting the facts is straightforward, but many +people strain to posit explanations and report them instead of the +facts. If the explanations are based on guesses about how Emacs is +implemented, they will be useless; meanwhile, lacking the facts, we will +have no real information about the bug. + + For example, suppose that you type @kbd{C-x C-f /glorp/baz.ugh +@key{RET}}, visiting a file which (you know) happens to be rather +large, and Emacs displays @samp{I feel pretty today}. The best way to +report the bug is with a sentence like the preceding one, because it +gives all the facts. + + A bad way would be to assume that the problem is due to the size of +the file and say, ``I visited a large file, and Emacs displayed @samp{I +feel pretty today}.'' This is what we mean by ``guessing +explanations.'' The problem is just as likely to be due to the fact +that there is a @samp{z} in the file name. If this is so, then when we +got your report, we would try out the problem with some ``large file,'' +probably with no @samp{z} in its name, and not see any problem. There +is no way in the world that we could guess that we should try visiting a +file with a @samp{z} in its name. + + Alternatively, the problem might be due to the fact that the file starts +with exactly 25 spaces. For this reason, you should make sure that you +inform us of the exact contents of any file that is needed to reproduce the +bug. What if the problem only occurs when you have typed the @kbd{C-x C-a} +command previously? This is why we ask you to give the exact sequence of +characters you typed since starting the Emacs session. + + You should not even say ``visit a file'' instead of @kbd{C-x C-f} unless +you @emph{know} that it makes no difference which visiting command is used. +Similarly, rather than saying ``if I have three characters on the line,'' +say ``after I type @kbd{@key{RET} A B C @key{RET} C-p},'' if that is +the way you entered the text. + + So please don't guess any explanations when you report a bug. If you +want to actually @emph{debug} the problem, and report explanations that +are more than guesses, that is useful---but please include the facts as +well. + +@node Checklist +@subsection Checklist for Bug Reports + +@cindex reporting bugs + The best way to send a bug report is to mail it electronically to the +Emacs maintainers at @email{bug-gnu-emacs@@gnu.org}, or to +@email{emacs-pretest-bug@@gnu.org} if you are pretesting an Emacs beta +release. (If you want to suggest a change as an improvement, use the +same address.) + + If you'd like to read the bug reports, you can find them on the +newsgroup @samp{gnu.emacs.bug}; keep in mind, however, that as a +spectator you should not criticize anything about what you see there. +The purpose of bug reports is to give information to the Emacs +maintainers. Spectators are welcome only as long as they do not +interfere with this. In particular, some bug reports contain fairly +large amounts of data; spectators should not complain about this. + + Please do not post bug reports using netnews; mail is more reliable +than netnews about reporting your correct address, which we may need +in order to ask you for more information. If your data is more than +500,000 bytes, please don't include it directly in the bug report; +instead, offer to send it on request, or make it available by ftp and +say where. + +@findex report-emacs-bug + A convenient way to send a bug report for Emacs is to use the command +@kbd{M-x report-emacs-bug}. This sets up a mail buffer (@pxref{Sending +Mail}) and automatically inserts @emph{some} of the essential +information. However, it cannot supply all the necessary information; +you should still read and follow the guidelines below, so you can enter +the other crucial information by hand before you send the message. + + To enable maintainers to investigate a bug, your report +should include all these things: + +@itemize @bullet +@item +The version number of Emacs. Without this, we won't know whether there +is any point in looking for the bug in the current version of GNU +Emacs. + +You can get the version number by typing @kbd{M-x emacs-version +@key{RET}}. If that command does not work, you probably have something +other than GNU Emacs, so you will have to report the bug somewhere +else. + +@item +The type of machine you are using, and the operating system name and +version number. @kbd{M-x emacs-version @key{RET}} provides this +information too. Copy its output from the @samp{*Messages*} buffer, so +that you get it all and get it accurately. + +@item +The operands given to the @code{configure} command when Emacs was +installed. + +@item +A complete list of any modifications you have made to the Emacs source. +(We may not have time to investigate the bug unless it happens in an +unmodified Emacs. But if you've made modifications and you don't tell +us, you are sending us on a wild goose chase.) + +Be precise about these changes. A description in English is not +enough---send a context diff for them. + +Adding files of your own, or porting to another machine, is a +modification of the source. + +@item +Details of any other deviations from the standard procedure for installing +GNU Emacs. + +@item +The complete text of any files needed to reproduce the bug. + + If you can tell us a way to cause the problem without visiting any files, +please do so. This makes it much easier to debug. If you do need files, +make sure you arrange for us to see their exact contents. For example, it +can matter whether there are spaces at the ends of lines, or a +newline after the last line in the buffer (nothing ought to care whether +the last line is terminated, but try telling the bugs that). + +@item +The precise commands we need to type to reproduce the bug. + +@findex open-dribble-file +@cindex dribble file +@cindex logging keystrokes +The easy way to record the input to Emacs precisely is to write a +dribble file. To start the file, execute the Lisp expression + +@example +(open-dribble-file "~/dribble") +@end example + +@noindent +using @kbd{M-:} or from the @samp{*scratch*} buffer just after +starting Emacs. From then on, Emacs copies all your input to the +specified dribble file until the Emacs process is killed. + +@item +@findex open-termscript +@cindex termscript file +@cindex @env{TERM} environment variable +For possible display bugs, the terminal type (the value of environment +variable @env{TERM}), the complete termcap entry for the terminal from +@file{/etc/termcap} (since that file is not identical on all machines), +and the output that Emacs actually sent to the terminal. + +The way to collect the terminal output is to execute the Lisp expression + +@example +(open-termscript "~/termscript") +@end example + +@noindent +using @kbd{M-:} or from the @samp{*scratch*} buffer just after +starting Emacs. From then on, Emacs copies all terminal output to the +specified termscript file as well, until the Emacs process is killed. +If the problem happens when Emacs starts up, put this expression into +your @file{.emacs} file so that the termscript file will be open when +Emacs displays the screen for the first time. + +Be warned: it is often difficult, and sometimes impossible, to fix a +terminal-dependent bug without access to a terminal of the type that +stimulates the bug. + +@item +If non-@acronym{ASCII} text or internationalization is relevant, the locale that +was current when you started Emacs. On GNU/Linux and Unix systems, or +if you use a Posix-style shell such as Bash, you can use this shell +command to view the relevant values: + +@smallexample +echo LC_ALL=$LC_ALL LC_COLLATE=$LC_COLLATE LC_CTYPE=$LC_CTYPE \ + LC_MESSAGES=$LC_MESSAGES LC_TIME=$LC_TIME LANG=$LANG +@end smallexample + +Alternatively, use the @command{locale} command, if your system has it, +to display your locale settings. + +You can use the @kbd{M-!} command to execute these commands from +Emacs, and then copy the output from the @samp{*Messages*} buffer into +the bug report. Alternatively, @kbd{M-x getenv @key{RET} LC_ALL +@key{RET}} will display the value of @code{LC_ALL} in the echo area, and +you can copy its output from the @samp{*Messages*} buffer. + +@item +A description of what behavior you observe that you believe is +incorrect. For example, ``The Emacs process gets a fatal signal,'' or, +``The resulting text is as follows, which I think is wrong.'' + +Of course, if the bug is that Emacs gets a fatal signal, then one can't +miss it. But if the bug is incorrect text, the maintainer might fail to +notice what is wrong. Why leave it to chance? + +Even if the problem you experience is a fatal signal, you should still +say so explicitly. Suppose something strange is going on, such as, your +copy of the source is out of sync, or you have encountered a bug in the +C library on your system. (This has happened!) Your copy might crash +and the copy here might not. If you @emph{said} to expect a crash, then +when Emacs here fails to crash, we would know that the bug was not +happening. If you don't say to expect a crash, then we would not know +whether the bug was happening---we would not be able to draw any +conclusion from our observations. + +@item +If the bug is that the Emacs Manual or the Emacs Lisp Reference Manual +fails to describe the actual behavior of Emacs, or that the text is +confusing, copy in the text from the online manual which you think is +at fault. If the section is small, just the section name is enough. + +@item +If the manifestation of the bug is an Emacs error message, it is +important to report the precise text of the error message, and a +backtrace showing how the Lisp program in Emacs arrived at the error. + +To get the error message text accurately, copy it from the +@samp{*Messages*} buffer into the bug report. Copy all of it, not just +part. + +@findex toggle-debug-on-error +@pindex Edebug +To make a backtrace for the error, use @kbd{M-x toggle-debug-on-error} +before the error happens (that is to say, you must give that command +and then make the bug happen). This causes the error to start the Lisp +debugger, which shows you a backtrace. Copy the text of the +debugger's backtrace into the bug report. @xref{Debugger,, The Lisp +Debugger, elisp, the Emacs Lisp Reference Manual}, for information on +debugging Emacs Lisp programs with the Edebug package. + +This use of the debugger is possible only if you know how to make the +bug happen again. If you can't make it happen again, at least copy +the whole error message. + +@item +Check whether any programs you have loaded into the Lisp world, +including your @file{.emacs} file, set any variables that may affect the +functioning of Emacs. Also, see whether the problem happens in a +freshly started Emacs without loading your @file{.emacs} file (start +Emacs with the @code{-q} switch to prevent loading the init file). If +the problem does @emph{not} occur then, you must report the precise +contents of any programs that you must load into the Lisp world in order +to cause the problem to occur. + +@item +If the problem does depend on an init file or other Lisp programs that +are not part of the standard Emacs system, then you should make sure it +is not a bug in those programs by complaining to their maintainers +first. After they verify that they are using Emacs in a way that is +supposed to work, they should report the bug. + +@item +If you wish to mention something in the GNU Emacs source, show the line +of code with a few lines of context. Don't just give a line number. + +The line numbers in the development sources don't match those in your +sources. It would take extra work for the maintainers to determine what +code is in your version at a given line number, and we could not be +certain. + +@item +Additional information from a C debugger such as GDB might enable +someone to find a problem on a machine which he does not have available. +If you don't know how to use GDB, please read the GDB manual---it is not +very long, and using GDB is easy. You can find the GDB distribution, +including the GDB manual in online form, in most of the same places you +can find the Emacs distribution. To run Emacs under GDB, you should +switch to the @file{src} subdirectory in which Emacs was compiled, then +do @samp{gdb emacs}. It is important for the directory @file{src} to be +current so that GDB will read the @file{.gdbinit} file in this +directory. + +However, you need to think when you collect the additional information +if you want it to show what causes the bug. + +@cindex backtrace for bug reports +For example, many people send just a backtrace, but that is not very +useful by itself. A simple backtrace with arguments often conveys +little about what is happening inside GNU Emacs, because most of the +arguments listed in the backtrace are pointers to Lisp objects. The +numeric values of these pointers have no significance whatever; all that +matters is the contents of the objects they point to (and most of the +contents are themselves pointers). + +@findex debug_print +To provide useful information, you need to show the values of Lisp +objects in Lisp notation. Do this for each variable which is a Lisp +object, in several stack frames near the bottom of the stack. Look at +the source to see which variables are Lisp objects, because the debugger +thinks of them as integers. + +To show a variable's value in Lisp syntax, first print its value, then +use the user-defined GDB command @code{pr} to print the Lisp object in +Lisp syntax. (If you must use another debugger, call the function +@code{debug_print} with the object as an argument.) The @code{pr} +command is defined by the file @file{.gdbinit}, and it works only if you +are debugging a running process (not with a core dump). + +To make Lisp errors stop Emacs and return to GDB, put a breakpoint at +@code{Fsignal}. + +For a short listing of Lisp functions running, type the GDB +command @code{xbacktrace}. + +The file @file{.gdbinit} defines several other commands that are useful +for examining the data types and contents of Lisp objects. Their names +begin with @samp{x}. These commands work at a lower level than +@code{pr}, and are less convenient, but they may work even when +@code{pr} does not, such as when debugging a core dump or when Emacs has +had a fatal signal. + +@cindex debugging Emacs, tricks and techniques +More detailed advice and other useful techniques for debugging Emacs +are available in the file @file{etc/DEBUG} in the Emacs distribution. +That file also includes instructions for investigating problems +whereby Emacs stops responding (many people assume that Emacs is +``hung,'' whereas in fact it might be in an infinite loop). + +To find the file @file{etc/DEBUG} in your Emacs installation, use the +directory name stored in the variable @code{data-directory}. +@end itemize + +Here are some things that are not necessary in a bug report: + +@itemize @bullet +@item +A description of the envelope of the bug---this is not necessary for a +reproducible bug. + +Often people who encounter a bug spend a lot of time investigating +which changes to the input file will make the bug go away and which +changes will not affect it. + +This is often time-consuming and not very useful, because the way we +will find the bug is by running a single example under the debugger +with breakpoints, not by pure deduction from a series of examples. +You might as well save time by not searching for additional examples. +It is better to send the bug report right away, go back to editing, +and find another bug to report. + +Of course, if you can find a simpler example to report @emph{instead} of +the original one, that is a convenience. Errors in the output will be +easier to spot, running under the debugger will take less time, etc. + +However, simplification is not vital; if you can't do this or don't have +time to try, please report the bug with your original test case. + +@item +A core dump file. + +Debugging the core dump might be useful, but it can only be done on +your machine, with your Emacs executable. Therefore, sending the core +dump file to the Emacs maintainers won't be useful. Above all, don't +include the core file in an email bug report! Such a large message +can be extremely inconvenient. + +@item +A system-call trace of Emacs execution. + +System-call traces are very useful for certain special kinds of +debugging, but in most cases they give little useful information. It is +therefore strange that many people seem to think that @emph{the} way to +report information about a crash is to send a system-call trace. Perhaps +this is a habit formed from experience debugging programs that don't +have source code or debugging symbols. + +In most programs, a backtrace is normally far, far more informative than +a system-call trace. Even in Emacs, a simple backtrace is generally +more informative, though to give full information you should supplement +the backtrace by displaying variable values and printing them as Lisp +objects with @code{pr} (see above). + +@item +A patch for the bug. + +A patch for the bug is useful if it is a good one. But don't omit the +other information that a bug report needs, such as the test case, on the +assumption that a patch is sufficient. We might see problems with your +patch and decide to fix the problem another way, or we might not +understand it at all. And if we can't understand what bug you are +trying to fix, or why your patch should be an improvement, we mustn't +install it. + +@ifnottex +@xref{Sending Patches}, for guidelines on how to make it easy for us to +understand and install your patches. +@end ifnottex + +@item +A guess about what the bug is or what it depends on. + +Such guesses are usually wrong. Even experts can't guess right about +such things without first using the debugger to find the facts. +@end itemize + +@node Sending Patches +@subsection Sending Patches for GNU Emacs + +@cindex sending patches for GNU Emacs +@cindex patches, sending + If you would like to write bug fixes or improvements for GNU Emacs, +that is very helpful. When you send your changes, please follow these +guidelines to make it easy for the maintainers to use them. If you +don't follow these guidelines, your information might still be useful, +but using it will take extra work. Maintaining GNU Emacs is a lot of +work in the best of circumstances, and we can't keep up unless you do +your best to help. + +@itemize @bullet +@item +Send an explanation with your changes of what problem they fix or what +improvement they bring about. For a bug fix, just include a copy of the +bug report, and explain why the change fixes the bug. + +(Referring to a bug report is not as good as including it, because then +we will have to look it up, and we have probably already deleted it if +we've already fixed the bug.) + +@item +Always include a proper bug report for the problem you think you have +fixed. We need to convince ourselves that the change is right before +installing it. Even if it is correct, we might have trouble +understanding it if we don't have a way to reproduce the problem. + +@item +Include all the comments that are appropriate to help people reading the +source in the future understand why this change was needed. + +@item +Don't mix together changes made for different reasons. +Send them @emph{individually}. + +If you make two changes for separate reasons, then we might not want to +install them both. We might want to install just one. If you send them +all jumbled together in a single set of diffs, we have to do extra work +to disentangle them---to figure out which parts of the change serve +which purpose. If we don't have time for this, we might have to ignore +your changes entirely. + +If you send each change as soon as you have written it, with its own +explanation, then two changes never get tangled up, and we can consider +each one properly without any extra work to disentangle them. + +@item +Send each change as soon as that change is finished. Sometimes people +think they are helping us by accumulating many changes to send them all +together. As explained above, this is absolutely the worst thing you +could do. + +Since you should send each change separately, you might as well send it +right away. That gives us the option of installing it immediately if it +is important. + +@item +Use @samp{diff -c} to make your diffs. Diffs without context are hard +to install reliably. More than that, they are hard to study; we must +always study a patch to decide whether we want to install it. Unidiff +format is better than contextless diffs, but not as easy to read as +@samp{-c} format. + +If you have GNU diff, use @samp{diff -c -F'^[_a-zA-Z0-9$]+ *('} when +making diffs of C code. This shows the name of the function that each +change occurs in. + +@item +Avoid any ambiguity as to which is the old version and which is the new. +Please make the old version the first argument to diff, and the new +version the second argument. And please give one version or the other a +name that indicates whether it is the old version or your new changed +one. + +@item +Write the change log entries for your changes. This is both to save us +the extra work of writing them, and to help explain your changes so we +can understand them. + +The purpose of the change log is to show people where to find what was +changed. So you need to be specific about what functions you changed; +in large functions, it's often helpful to indicate where within the +function the change was. + +On the other hand, once you have shown people where to find the change, +you need not explain its purpose in the change log. Thus, if you add a +new function, all you need to say about it is that it is new. If you +feel that the purpose needs explaining, it probably does---but put the +explanation in comments in the code. It will be more useful there. + +Please read the @file{ChangeLog} files in the @file{src} and +@file{lisp} directories to see what sorts of information to put in, +and to learn the style that we use. @xref{Change Log}. + +@item +When you write the fix, keep in mind that we can't install a change that +would break other systems. Please think about what effect your change +will have if compiled on another type of system. + +Sometimes people send fixes that @emph{might} be an improvement in +general---but it is hard to be sure of this. It's hard to install +such changes because we have to study them very carefully. Of course, +a good explanation of the reasoning by which you concluded the change +was correct can help convince us. + +The safest changes are changes to the configuration files for a +particular machine. These are safe because they can't create new bugs +on other machines. + +Please help us keep up with the workload by designing the patch in a +form that is clearly safe to install. +@end itemize + +@node Contributing, Service, Bugs, Top +@section Contributing to Emacs Development + +If you would like to help pretest Emacs releases to assure they work +well, or if you would like to work on improving Emacs, please contact +the maintainers at @email{emacs-devel@@gnu.org}. A pretester +should be prepared to investigate bugs as well as report them. If you'd +like to work on improving Emacs, please ask for suggested projects or +suggest your own ideas. + +If you have already written an improvement, please tell us about it. If +you have not yet started work, it is useful to contact +@email{emacs-devel@@gnu.org} before you start; it might be +possible to suggest ways to make your extension fit in better with the +rest of Emacs. + +The development version of Emacs can be downloaded from the CVS +repository where it is actively maintained by a group of developers. +See the Emacs project page +@url{http://savannah.gnu.org/projects/emacs/} for details. + +@node Service, Copying, Contributing, Top +@section How To Get Help with GNU Emacs + +If you need help installing, using or changing GNU Emacs, there are two +ways to find it: + +@itemize @bullet +@item +Send a message to the mailing list +@email{help-gnu-emacs@@gnu.org}, or post your request on +newsgroup @code{gnu.emacs.help}. (This mailing list and newsgroup +interconnect, so it does not matter which one you use.) + +@item +Look in the service directory for someone who might help you for a fee. +The service directory is found in the file named @file{etc/SERVICE} in the +Emacs distribution. +@end itemize + +@ifnottex +@lowersections +@end ifnottex + +@ignore + arch-tag: c9cba76d-b2cb-4e0c-ae3f-19d5ef35817c +@end ignore diff --git a/doc/emacs/vc-xtra.texi b/doc/emacs/vc-xtra.texi new file mode 100644 index 00000000000..6ec69d60896 --- /dev/null +++ b/doc/emacs/vc-xtra.texi @@ -0,0 +1,32 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@c +@c This file is included in emacs-xtra.texi when producing the printed +@c version. +@iftex +@node Advanced VC Usage +@section Advanced VC Usage + + Commonly used features of Emacs' version control (VC) support are +described in the main Emacs manual (@pxref{Version Control,,,emacs, +the Emacs Manual}). This chapter describes more advanced VC usage. + +@menu +* VC Dired Mode:: Listing files managed by version control. +* VC Dired Commands:: Commands to use in a VC Dired buffer. +* Remote Repositories:: Efficient access to remote CVS servers. +* Snapshots:: Sets of file versions treated as a unit. +* Miscellaneous VC:: Various other commands and features of VC. +* Customizing VC:: Variables that change VC's behavior. +@end menu +@end iftex + +@iftex +@include vc1-xtra.texi +@include vc2-xtra.texi +@end iftex + +@ignore + arch-tag: 11a18d0e-1baf-49da-8e38-f61195ae4dc3 +@end ignore diff --git a/doc/emacs/vc1-xtra.texi b/doc/emacs/vc1-xtra.texi new file mode 100644 index 00000000000..6d5df78848c --- /dev/null +++ b/doc/emacs/vc1-xtra.texi @@ -0,0 +1,151 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@c +@c This file is included either in vc-xtra.texi (when producing the +@c printed version) or in the main Emacs manual (for the on-line version). +@node VC Dired Mode +@subsection Dired under VC + +@cindex PCL-CVS +@pindex cvs +@cindex CVS Dired Mode + The VC Dired Mode described here works with all the version control +systems that VC supports. Another more powerful facility, designed +specifically for CVS, is called PCL-CVS. @xref{Top, , About PCL-CVS, +pcl-cvs, PCL-CVS --- The Emacs Front-End to CVS}. + +@kindex C-x v d +@findex vc-directory + When you are working on a large program, it is often useful to find +out which files have changed within an entire directory tree, or to view +the status of all files under version control at once, and to perform +version control operations on collections of files. You can use the +command @kbd{C-x v d} (@code{vc-directory}) to make a directory listing +that includes only files relevant for version control. + +@vindex vc-dired-terse-display + @kbd{C-x v d} creates a buffer which uses VC Dired Mode. This looks +much like an ordinary Dired buffer +@iftex +(@pxref{Dired,,,emacs, the Emacs Manual}); +@end iftex +@ifnottex +(@pxref{Dired}); +@end ifnottex +however, normally it shows only the noteworthy files (those locked or +not up-to-date). This is called @dfn{terse display}. If you set the +variable @code{vc-dired-terse-display} to @code{nil}, then VC Dired +shows all relevant files---those managed under version control, plus +all subdirectories (@dfn{full display}). The command @kbd{v t} in a +VC Dired buffer toggles between terse display and full display +(@pxref{VC Dired Commands}). + +@vindex vc-dired-recurse + By default, VC Dired produces a recursive listing of noteworthy or +relevant files at or below the given directory. You can change this by +setting the variable @code{vc-dired-recurse} to @code{nil}; then VC +Dired shows only the files in the given directory. + + The line for an individual file shows the version control state in the +place of the hard link count, owner, group, and size of the file. If +the file is unmodified, in sync with the master file, the version +control state shown is blank. Otherwise it consists of text in +parentheses. Under RCS and SCCS, the name of the user locking the file +is shown; under CVS, an abbreviated version of the @samp{cvs status} +output is used. Here is an example using RCS: + +@smallexample +@group + /home/jim/project: + + -rw-r--r-- (jim) Apr 2 23:39 file1 + -r--r--r-- Apr 5 20:21 file2 +@end group +@end smallexample + +@noindent +The files @samp{file1} and @samp{file2} are under version control, +@samp{file1} is locked by user jim, and @samp{file2} is unlocked. + + Here is an example using CVS: + +@smallexample +@group + /home/joe/develop: + + -rw-r--r-- (modified) Aug 2 1997 file1.c + -rw-r--r-- Apr 4 20:09 file2.c + -rw-r--r-- (merge) Sep 13 1996 file3.c +@end group +@end smallexample + + Here @samp{file1.c} is modified with respect to the repository, and +@samp{file2.c} is not. @samp{file3.c} is modified, but other changes +have also been checked in to the repository---you need to merge them +with the work file before you can check it in. + +@vindex vc-stay-local +@vindex vc-cvs-stay-local + In the above, if the repository were on a remote machine, VC would +only contact it when the variable @code{vc-stay-local} (or +@code{vc-cvs-stay-local}) is nil (@pxref{CVS Options}). This is +because access to the repository may be slow, or you may be working +offline and not have access to the repository at all. As a +consequence, VC would not be able to tell you that @samp{file3.c} is +in the ``merge'' state; you would learn that only when you try to +check-in your modified copy of the file, or use a command such as +@kbd{C-x v m}. + + In practice, this is not a problem because CVS handles this case +consistently whenever it arises. In VC, you'll simply get prompted to +merge the remote changes into your work file first. The benefits of +less network communication usually outweigh the disadvantage of not +seeing remote changes immediately. + +@vindex vc-directory-exclusion-list + When VC Dired displays subdirectories (in the ``full'' display mode), +it omits some that should never contain any files under version control. +By default, this includes Version Control subdirectories such as +@samp{RCS} and @samp{CVS}; you can customize this by setting the +variable @code{vc-directory-exclusion-list}. + + You can fine-tune VC Dired's format by typing @kbd{C-u C-x v d}---as in +ordinary Dired, that allows you to specify additional switches for the +@samp{ls} command. + +@node VC Dired Commands +@subsection VC Dired Commands + + All the usual Dired commands work normally in VC Dired mode, except +for @kbd{v}, which is redefined as the version control prefix. You can +invoke VC commands such as @code{vc-diff} and @code{vc-print-log} by +typing @kbd{v =}, or @kbd{v l}, and so on. Most of these commands apply +to the file name on the current line. + + The command @kbd{v v} (@code{vc-next-action}) operates on all the +marked files, so that you can lock or check in several files at once. +If it operates on more than one file, it handles each file according to +its current state; thus, it might lock one file, but check in another +file. This could be confusing; it is up to you to avoid confusing +behavior by marking a set of files that are in a similar state. If no +files are marked, @kbd{v v} operates on the file in the current line. + + If any files call for check-in, @kbd{v v} reads a single log entry, +then uses it for all the files being checked in. This is convenient for +registering or checking in several files at once, as part of the same +change. + +@findex vc-dired-toggle-terse-mode +@findex vc-dired-mark-locked + You can toggle between terse display (only locked files, or files not +up-to-date) and full display at any time by typing @kbd{v t} +(@code{vc-dired-toggle-terse-mode}). There is also a special command +@kbd{* l} (@code{vc-dired-mark-locked}), which marks all files currently +locked (or, with CVS, all files not up-to-date). Thus, typing @kbd{* l +t k} is another way to delete from the buffer all files except those +currently locked. + +@ignore + arch-tag: 8e8c2a01-ad41-4e61-a89a-60131ad67263 +@end ignore diff --git a/doc/emacs/vc2-xtra.texi b/doc/emacs/vc2-xtra.texi new file mode 100644 index 00000000000..83f28088726 --- /dev/null +++ b/doc/emacs/vc2-xtra.texi @@ -0,0 +1,789 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@c +@c This file is included either in vc-xtra.texi (when producing the +@c printed version) or in the main Emacs manual (for the on-line version). +@node Remote Repositories +@subsection Remote Repositories +@cindex remote repositories (CVS) + + A common way of using CVS is to set up a central CVS repository on +some Internet host, then have each developer check out a personal +working copy of the files on his local machine. Committing changes to +the repository, and picking up changes from other users into one's own +working area, then works by direct interactions with the CVS server. + + One difficulty is that access to the CVS server is often slow, and +that developers might need to work off-line as well. VC is designed +to reduce the amount of network interaction necessary. + +@menu +* Version Backups:: Keeping local copies of repository versions. +* Local Version Control:: Using another version system for local editing. +@end menu + +@node Version Backups +@subsubsection Version Backups +@cindex version backups + +@cindex automatic version backups + When VC sees that the CVS repository for a file is on a remote +machine, it automatically makes local backups of unmodified versions +of the file---@dfn{automatic version backups}. This means that you +can compare the file to the repository version (@kbd{C-x v =}), or +revert to that version (@kbd{C-x v u}), without any network +interactions. + + The local copy of the unmodified file is called a @dfn{version +backup} to indicate that it corresponds exactly to a version that is +stored in the repository. Note that version backups are not the same +as ordinary Emacs backup files +@iftex +(@pxref{Backup,,,emacs, the Emacs Manual}). +@end iftex +@ifnottex +(@pxref{Backup}). +@end ifnottex +But they follow a similar naming convention. + + For a file that comes from a remote CVS repository, VC makes a +version backup whenever you save the first changes to the file, and +removes it after you have committed your modified version to the +repository. You can disable the making of automatic version backups by +setting @code{vc-cvs-stay-local} to @code{nil} (@pxref{CVS Options}). + +@cindex manual version backups + The name of the automatic version backup for version @var{version} +of file @var{file} is @code{@var{file}.~@var{version}.~}. This is +almost the same as the name used by @kbd{C-x v ~} +@iftex +(@pxref{Old Versions,,,emacs, the Emacs Manual}), +@end iftex +@ifnottex +(@pxref{Old Versions}), +@end ifnottex +the only difference being the additional dot (@samp{.}) after the +version number. This similarity is intentional, because both kinds of +files store the same kind of information. The file made by @kbd{C-x v +~} acts as a @dfn{manual version backup}. + + All the VC commands that operate on old versions of a file can use +both kinds of version backups. For instance, @kbd{C-x v ~} uses +either an automatic or a manual version backup, if possible, to get +the contents of the version you request. Likewise, @kbd{C-x v =} and +@kbd{C-x v u} use either an automatic or a manual version backup, if +one of them exists, to get the contents of a version to compare or +revert to. If you changed a file outside of Emacs, so that no +automatic version backup was created for the previous text, you can +create a manual backup of that version using @kbd{C-x v ~}, and thus +obtain the benefit of the local copy for Emacs commands. + + The only difference in Emacs's handling of manual and automatic +version backups, once they exist, is that Emacs deletes automatic +version backups when you commit to the repository. By contrast, +manual version backups remain until you delete them. + +@node Local Version Control +@subsubsection Local Version Control +@cindex local version control +@cindex local back end (version control) + +When you make many changes to a file that comes from a remote +repository, it can be convenient to have version control on your local +machine as well. You can then record intermediate versions, revert to +a previous state, etc., before you actually commit your changes to the +remote server. + +VC lets you do this by putting a file under a second, local version +control system, so that the file is effectively registered in two +systems at the same time. For the description here, we will assume +that the remote system is CVS, and you use RCS locally, although the +mechanism works with any combination of version control systems +(@dfn{back ends}). + +To make it work with other back ends, you must make sure that the +``more local'' back end comes before the ``more remote'' back end in +the setting of @code{vc-handled-backends} (@pxref{Customizing VC}). By +default, this variable is set up so that you can use remote CVS and +local RCS as described here. + +To start using local RCS for a file that comes from a remote CVS +server, you must @emph{register the file in RCS}, by typing @kbd{C-u +C-x v v rcs @key{RET}}. (In other words, use @code{vc-next-action} with a +prefix argument, and specify RCS as the back end.) + +You can do this at any time; it does not matter whether you have +already modified the file with respect to the version in the CVS +repository. If possible, VC tries to make the RCS master start with +the unmodified repository version, then checks in any local changes +as a new version. This works if you have not made any changes yet, or +if the unmodified repository version exists locally as a version +backup (@pxref{Version Backups}). If the unmodified version is not +available locally, the RCS master starts with the modified version; +the only drawback to this is that you cannot compare your changes +locally to what is stored in the repository. + +The version number of the RCS master is derived from the current CVS +version, starting a branch from it. For example, if the current CVS +version is 1.23, the local RCS branch will be 1.23.1. Version 1.23 in +the RCS master will be identical to version 1.23 under CVS; your first +changes are checked in as 1.23.1.1. (If the unmodified file is not +available locally, VC will check in the modified file twice, both as +1.23 and 1.23.1.1, to make the revision numbers consistent.) + +If you do not use locking under CVS (the default), locking is also +disabled for RCS, so that editing under RCS works exactly as under +CVS. + +When you are done with local editing, you can commit the final version +back to the CVS repository by typing @kbd{C-u C-x v v cvs @key{RET}}. +This initializes the log entry buffer +@iftex +(@pxref{Log Buffer,,,emacs, the Emacs Manual}) +@end iftex +@ifnottex +(@pxref{Log Buffer}) +@end ifnottex +to contain all the log entries you have recorded in the RCS master; +you can edit them as you wish, and then commit in CVS by typing +@kbd{C-c C-c}. If the commit is successful, VC removes the RCS +master, so that the file is once again registered under CVS only. +(The RCS master is not actually deleted, just renamed by appending +@samp{~} to the name, so that you can refer to it later if you wish.) + +While using local RCS, you can pick up recent changes from the CVS +repository into your local file, or commit some of your changes back +to CVS, without terminating local RCS version control. To do this, +switch to the CVS back end temporarily, with the @kbd{C-x v b} command: + +@table @kbd +@item C-x v b +Switch to another back end that the current file is registered +under (@code{vc-switch-backend}). + +@item C-u C-x v b @var{backend} @key{RET} +Switch to @var{backend} for the current file. +@end table + +@kindex C-x v b +@findex vc-switch-backend +@kbd{C-x v b} does not change the buffer contents, or any files; it +only changes VC's perspective on how to handle the file. Any +subsequent VC commands for that file will operate on the back end that +is currently selected. + +If the current file is registered in more than one back end, typing +@kbd{C-x v b} ``cycles'' through all of these back ends. With a +prefix argument, it asks for the back end to use in the minibuffer. + +Thus, if you are using local RCS, and you want to pick up some recent +changes in the file from remote CVS, first visit the file, then type +@kbd{C-x v b} to switch to CVS, and finally use @kbd{C-x v m +@key{RET}} to merge the news +@iftex +(@pxref{Merging,,,emacs, the Emacs Manual}). +@end iftex +@ifnottex +(@pxref{Merging}). +@end ifnottex +You can then switch back to RCS by typing @kbd{C-x v b} again, and +continue to edit locally. + +But if you do this, the revision numbers in the RCS master no longer +correspond to those of CVS. Technically, this is not a problem, but +it can become difficult to keep track of what is in the CVS repository +and what is not. So we suggest that you return from time to time to +CVS-only operation, by committing your local changes back to the +repository using @kbd{C-u C-x v v cvs @key{RET}}. + +@node Snapshots +@subsection Snapshots +@cindex snapshots and version control + + A @dfn{snapshot} is a named set of file versions (one for each +registered file) that you can treat as a unit. One important kind of +snapshot is a @dfn{release}, a (theoretically) stable version of the +system that is ready for distribution to users. + +@menu +* Making Snapshots:: The snapshot facilities. +* Snapshot Caveats:: Things to be careful of when using snapshots. +@end menu + +@node Making Snapshots +@subsubsection Making and Using Snapshots + + There are two basic commands for snapshots; one makes a +snapshot with a given name, the other retrieves a named snapshot. + +@table @code +@kindex C-x v s +@findex vc-create-snapshot +@item C-x v s @var{name} @key{RET} +Define the last saved versions of every registered file in or under the +current directory as a snapshot named @var{name} +(@code{vc-create-snapshot}). + +@kindex C-x v r +@findex vc-retrieve-snapshot +@item C-x v r @var{name} @key{RET} +For all registered files at or below the current directory level, select +whatever versions correspond to the snapshot @var{name} +(@code{vc-retrieve-snapshot}). + +This command reports an error if any files are locked at or below the +current directory, without changing anything; this is to avoid +overwriting work in progress. +@end table + + A snapshot uses a very small amount of resources---just enough to record +the list of file names and which version belongs to the snapshot. Thus, +you need not hesitate to create snapshots whenever they are useful. + + You can give a snapshot name as an argument to @kbd{C-x v =} or +@kbd{C-x v ~} +@iftex +(@pxref{Old Versions,,,emacs, the Emacs Manual}). +@end iftex +@ifnottex +(@pxref{Old Versions}). +@end ifnottex +Thus, you can use it to compare a snapshot against the current files, +or two snapshots against each other, or a snapshot against a named +version. + +@node Snapshot Caveats +@subsubsection Snapshot Caveats + +@cindex named configurations (RCS) + VC's snapshot facilities are modeled on RCS's named-configuration +support. They use RCS's native facilities for this, so +snapshots made using RCS through VC are visible even when you bypass VC. + + With CVS, Meta-CVS, and Subversion, VC also uses the native +mechanism provided by that back end to make snapshots and retrieve them +(@dfn{tags} for CVS and Meta-CVS, @dfn{copies} for Subversion). + +@c worded verbosely to avoid overfull hbox. + For SCCS, VC implements snapshots itself. The files it uses contain +name/file/version-number triples. These snapshots are visible only +through VC. + + There is no support for VC snapshots using GNU Arch yet. + + A snapshot is a set of checked-in versions. So make sure that all the +files are checked in and not locked when you make a snapshot. + + File renaming and deletion can create some difficulties with snapshots. +This is not a VC-specific problem, but a general design issue in version +control systems that no one has solved very well yet. + + If you rename a registered file, you need to rename its master along +with it (the command @code{vc-rename-file} does this automatically). If +you are using SCCS, you must also update the records of the snapshot, to +mention the file by its new name (@code{vc-rename-file} does this, +too). An old snapshot that refers to a master file that no longer +exists under the recorded name is invalid; VC can no longer retrieve +it. It would be beyond the scope of this manual to explain enough about +RCS and SCCS to explain how to update the snapshots by hand. + + Using @code{vc-rename-file} makes the snapshot remain valid for +retrieval, but it does not solve all problems. For example, some of the +files in your program probably refer to others by name. At the very +least, the makefile probably mentions the file that you renamed. If you +retrieve an old snapshot, the renamed file is retrieved under its new +name, which is not the name that the makefile expects. So the program +won't really work as retrieved. + +@node Miscellaneous VC +@subsection Miscellaneous Commands and Features of VC + + This section explains the less-frequently-used features of VC. + +@menu +* Change Logs and VC:: Generating a change log file from log entries. +* Renaming and VC:: A command to rename both the source and master + file correctly. +* Version Headers:: Inserting version control headers into working files. +@end menu + +@node Change Logs and VC +@subsubsection Change Logs and VC + + If you use RCS or CVS for a program and also maintain a change log +file for it +@iftex +(@pxref{Change Log,,,emacs, the Emacs Manual}), +@end iftex +@ifnottex +(@pxref{Change Log}), +@end ifnottex +you can generate change log entries automatically from the version +control log entries: + +@table @kbd +@item C-x v a +@kindex C-x v a +@findex vc-update-change-log +Visit the current directory's change log file and, for registered files +in that directory, create new entries for versions checked in since the +most recent entry in the change log file. +(@code{vc-update-change-log}). + +This command works with RCS or CVS only, not with any of the other +back ends. + +@item C-u C-x v a +As above, but only find entries for the current buffer's file. + +@item M-1 C-x v a +As above, but find entries for all the currently visited files that are +maintained with version control. This works only with RCS, and it puts +all entries in the log for the default directory, which may not be +appropriate. +@end table + + For example, suppose the first line of @file{ChangeLog} is dated +1999-04-10, and that the only check-in since then was by Nathaniel +Bowditch to @file{rcs2log} on 1999-05-22 with log text @samp{Ignore log +messages that start with `#'.}. Then @kbd{C-x v a} visits +@file{ChangeLog} and inserts text like this: + +@iftex +@medbreak +@end iftex +@smallexample +@group +1999-05-22 Nathaniel Bowditch <nat@@apn.org> + + * rcs2log: Ignore log messages that start with `#'. +@end group +@end smallexample +@iftex +@medbreak +@end iftex + +@noindent +You can then edit the new change log entry further as you wish. + + Some of the new change log entries may duplicate what's already in +ChangeLog. You will have to remove these duplicates by hand. + + Normally, the log entry for file @file{foo} is displayed as @samp{* +foo: @var{text of log entry}}. The @samp{:} after @file{foo} is omitted +if the text of the log entry starts with @w{@samp{(@var{functionname}): +}}. For example, if the log entry for @file{vc.el} is +@samp{(vc-do-command): Check call-process status.}, then the text in +@file{ChangeLog} looks like this: + +@iftex +@medbreak +@end iftex +@smallexample +@group +1999-05-06 Nathaniel Bowditch <nat@@apn.org> + + * vc.el (vc-do-command): Check call-process status. +@end group +@end smallexample +@iftex +@medbreak +@end iftex + + When @kbd{C-x v a} adds several change log entries at once, it groups +related log entries together if they all are checked in by the same +author at nearly the same time. If the log entries for several such +files all have the same text, it coalesces them into a single entry. +For example, suppose the most recent check-ins have the following log +entries: + +@flushleft +@bullet{} For @file{vc.texinfo}: @samp{Fix expansion typos.} +@bullet{} For @file{vc.el}: @samp{Don't call expand-file-name.} +@bullet{} For @file{vc-hooks.el}: @samp{Don't call expand-file-name.} +@end flushleft + +@noindent +They appear like this in @file{ChangeLog}: + +@iftex +@medbreak +@end iftex +@smallexample +@group +1999-04-01 Nathaniel Bowditch <nat@@apn.org> + + * vc.texinfo: Fix expansion typos. + + * vc.el, vc-hooks.el: Don't call expand-file-name. +@end group +@end smallexample +@iftex +@medbreak +@end iftex + + Normally, @kbd{C-x v a} separates log entries by a blank line, but you +can mark several related log entries to be clumped together (without an +intervening blank line) by starting the text of each related log entry +with a label of the form @w{@samp{@{@var{clumpname}@} }}. The label +itself is not copied to @file{ChangeLog}. For example, suppose the log +entries are: + +@flushleft +@bullet{} For @file{vc.texinfo}: @samp{@{expand@} Fix expansion typos.} +@bullet{} For @file{vc.el}: @samp{@{expand@} Don't call expand-file-name.} +@bullet{} For @file{vc-hooks.el}: @samp{@{expand@} Don't call expand-file-name.} +@end flushleft + +@noindent +Then the text in @file{ChangeLog} looks like this: + +@iftex +@medbreak +@end iftex +@smallexample +@group +1999-04-01 Nathaniel Bowditch <nat@@apn.org> + + * vc.texinfo: Fix expansion typos. + * vc.el, vc-hooks.el: Don't call expand-file-name. +@end group +@end smallexample +@iftex +@medbreak +@end iftex + + A log entry whose text begins with @samp{#} is not copied to +@file{ChangeLog}. For example, if you merely fix some misspellings in +comments, you can log the change with an entry beginning with @samp{#} +to avoid putting such trivia into @file{ChangeLog}. + +@node Renaming and VC +@subsubsection Renaming VC Work Files and Master Files + +@findex vc-rename-file + When you rename a registered file, you must also rename its master +file correspondingly to get proper results. Use @code{vc-rename-file} +to rename the source file as you specify, and rename its master file +accordingly. It also updates any snapshots (@pxref{Snapshots}) that +mention the file, so that they use the new name; despite this, the +snapshot thus modified may not completely work (@pxref{Snapshot +Caveats}). + + Some back ends do not provide an explicit rename operation to their +repositories. After issuing @code{vc-rename-file}, use @kbd{C-x v v} +on the original and renamed buffers and provide the necessary edit +log. + + You cannot use @code{vc-rename-file} on a file that is locked by +someone else. + +@node Version Headers +@subsubsection Inserting Version Control Headers + + Sometimes it is convenient to put version identification strings +directly into working files. Certain special strings called +@dfn{version headers} are replaced in each successive version by the +number of that version, the name of the user who created it, and other +relevant information. All of the back ends that VC supports have such +a mechanism, except GNU Arch. + + VC does not normally use the information contained in these headers. +The exception is RCS---with RCS, version headers are sometimes more +reliable than the master file to determine which version of the file +you are editing. Note that in a multi-branch environment, version +headers are necessary to make VC behave correctly +@iftex +(@pxref{Multi-User Branching,,,emacs, the Emacs Manual}). +@end iftex +@ifnottex +(@pxref{Multi-User Branching}). +@end ifnottex + + Searching for RCS version headers is controlled by the variable +@code{vc-consult-headers}. If it is non-@code{nil} (the default), +Emacs searches for headers to determine the version number you are +editing. Setting it to @code{nil} disables this feature. + + Note that although CVS uses the same kind of version headers as RCS +does, VC never searches for these headers if you are using CVS, +regardless of the above setting. + +@kindex C-x v h +@findex vc-insert-headers + You can use the @kbd{C-x v h} command (@code{vc-insert-headers}) to +insert a suitable header string. + +@table @kbd +@item C-x v h +Insert headers in a file for use with your version-control system. +@end table + +@vindex vc-@var{backend}-header + The default header string is @samp{@w{$}Id$} for RCS and +@samp{@w{%}W%} for SCCS. You can specify other headers to insert by +setting the variables @code{vc-@var{backend}-header} where +@var{backend} is @code{rcs} or @code{sccs}. + + Instead of a single string, you can specify a list of strings; then +each string in the list is inserted as a separate header on a line of +its own. + + It may be necessary to use apparently-superfluous backslashes when +writing the strings that you put in this variable. For instance, you +might write @code{"$Id\$"} rather than @code{"$Id@w{$}"}. The extra +backslash prevents the string constant from being interpreted as a +header, if the Emacs Lisp file containing it is maintained with +version control. + +@vindex vc-comment-alist + Each header is inserted surrounded by tabs, inside comment delimiters, +on a new line at point. Normally the ordinary comment +start and comment end strings of the current mode are used, but for +certain modes, there are special comment delimiters for this purpose; +the variable @code{vc-comment-alist} specifies them. Each element of +this list has the form @code{(@var{mode} @var{starter} @var{ender})}. + +@vindex vc-static-header-alist + The variable @code{vc-static-header-alist} specifies further strings +to add based on the name of the buffer. Its value should be a list of +elements of the form @code{(@var{regexp} . @var{format})}. Whenever +@var{regexp} matches the buffer name, @var{format} is inserted as part +of the header. A header line is inserted for each element that matches +the buffer name, and for each string specified by +@code{vc-@var{backend}-header}. The header line is made by processing the +string from @code{vc-@var{backend}-header} with the format taken from the +element. The default value for @code{vc-static-header-alist} is as follows: + +@example +@group +(("\\.c$" . + "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n\ +#endif /* lint */\n")) +@end group +@end example + +@noindent +It specifies insertion of text of this form: + +@example +@group + +#ifndef lint +static char vcid[] = "@var{string}"; +#endif /* lint */ +@end group +@end example + +@noindent +Note that the text above starts with a blank line. + + If you use more than one version header in a file, put them close +together in the file. The mechanism in @code{revert-buffer} that +preserves markers may not handle markers positioned between two version +headers. + +@node Customizing VC +@subsection Customizing VC + +@vindex vc-handled-backends +The variable @code{vc-handled-backends} determines which version +control systems VC should handle. The default value is @code{(RCS CVS +SVN SCCS BZR GIT HG Arch MCVS)}, so it contains all the version systems +that are currently supported. If you want VC to ignore one or more of +these systems, exclude its name from the list. To disable VC entirely, +set this variable to @code{nil}. + +The order of systems in the list is significant: when you visit a file +registered in more than one system (@pxref{Local Version Control}), VC +uses the system that comes first in @code{vc-handled-backends} by +default. The order is also significant when you register a file for +the first time, see +@iftex +@ref{Registering,,,emacs, the Emacs Manual}, +@end iftex +@ifnottex +@ref{Registering}, +@end ifnottex +for details. + +@menu +* General VC Options:: Options that apply to multiple back ends. +* RCS and SCCS:: Options for RCS and SCCS. +* CVS Options:: Options for CVS. +@end menu + +@node General VC Options +@subsubsection General Options + +@vindex vc-make-backup-files + Emacs normally does not save backup files for source files that are +maintained with version control. If you want to make backup files even +for files that use version control, set the variable +@code{vc-make-backup-files} to a non-@code{nil} value. + +@vindex vc-keep-workfiles + Normally the work file exists all the time, whether it is locked or +not. If you set @code{vc-keep-workfiles} to @code{nil}, then checking +in a new version with @kbd{C-x v v} deletes the work file; but any +attempt to visit the file with Emacs creates it again. (With CVS, work +files are always kept.) + +@vindex vc-follow-symlinks + Editing a version-controlled file through a symbolic link can be +dangerous. It bypasses the version control system---you can edit the +file without locking it, and fail to check your changes in. Also, +your changes might overwrite those of another user. To protect against +this, VC checks each symbolic link that you visit, to see if it points +to a file under version control. + + The variable @code{vc-follow-symlinks} controls what to do when a +symbolic link points to a version-controlled file. If it is @code{nil}, +VC only displays a warning message. If it is @code{t}, VC automatically +follows the link, and visits the real file instead, telling you about +this in the echo area. If the value is @code{ask} (the default), VC +asks you each time whether to follow the link. + +@vindex vc-suppress-confirm + If @code{vc-suppress-confirm} is non-@code{nil}, then @kbd{C-x v v} +and @kbd{C-x v i} can save the current buffer without asking, and +@kbd{C-x v u} also operates without asking for confirmation. (This +variable does not affect @kbd{C-x v c}; that operation is so drastic +that it should always ask for confirmation.) + +@vindex vc-command-messages + VC mode does much of its work by running the shell commands for RCS, +CVS and SCCS. If @code{vc-command-messages} is non-@code{nil}, VC +displays messages to indicate which shell commands it runs, and +additional messages when the commands finish. + +@vindex vc-path + You can specify additional directories to search for version control +programs by setting the variable @code{vc-path}. These directories +are searched before the usual search path. It is rarely necessary to +set this variable, because VC normally finds the proper files +automatically. + +@node RCS and SCCS +@subsubsection Options for RCS and SCCS + +@cindex non-strict locking (RCS) +@cindex locking, non-strict (RCS) + By default, RCS uses locking to coordinate the activities of several +users, but there is a mode called @dfn{non-strict locking} in which +you can check-in changes without locking the file first. Use +@samp{rcs -U} to switch to non-strict locking for a particular file, +see the @code{rcs} manual page for details. + + When deducing the version control state of an RCS file, VC first +looks for an RCS version header string in the file (@pxref{Version +Headers}). If there is no header string, VC normally looks at the +file permissions of the work file; this is fast. But there might be +situations when the file permissions cannot be trusted. In this case +the master file has to be consulted, which is rather expensive. Also +the master file can only tell you @emph{if} there's any lock on the +file, but not whether your work file really contains that locked +version. + +@vindex vc-consult-headers + You can tell VC not to use version headers to determine the file +status by setting @code{vc-consult-headers} to @code{nil}. VC then +always uses the file permissions (if it is supposed to trust them), or +else checks the master file. + +@vindex vc-mistrust-permissions + You can specify the criterion for whether to trust the file +permissions by setting the variable @code{vc-mistrust-permissions}. +Its value can be @code{t} (always mistrust the file permissions and +check the master file), @code{nil} (always trust the file +permissions), or a function of one argument which makes the decision. +The argument is the directory name of the @file{RCS} subdirectory. A +non-@code{nil} value from the function says to mistrust the file +permissions. If you find that the file permissions of work files are +changed erroneously, set @code{vc-mistrust-permissions} to @code{t}. +Then VC always checks the master file to determine the file's status. + + VC determines the version control state of files under SCCS much as +with RCS. It does not consider SCCS version headers, though. Thus, +the variable @code{vc-mistrust-permissions} affects SCCS use, but +@code{vc-consult-headers} does not. + +@node CVS Options +@subsubsection Options specific for CVS + +@cindex locking (CVS) + By default, CVS does not use locking to coordinate the activities of +several users; anyone can change a work file at any time. However, +there are ways to restrict this, resulting in behavior that resembles +locking. + +@cindex CVSREAD environment variable (CVS) + For one thing, you can set the @env{CVSREAD} environment variable +(the value you use makes no difference). If this variable is defined, +CVS makes your work files read-only by default. In Emacs, you must +type @kbd{C-x v v} to make the file writable, so that editing works +in fact similar as if locking was used. Note however, that no actual +locking is performed, so several users can make their files writable +at the same time. When setting @env{CVSREAD} for the first time, make +sure to check out all your modules anew, so that the file protections +are set correctly. + +@cindex cvs watch feature +@cindex watching files (CVS) + Another way to achieve something similar to locking is to use the +@dfn{watch} feature of CVS. If a file is being watched, CVS makes it +read-only by default, and you must also use @kbd{C-x v v} in Emacs to +make it writable. VC calls @code{cvs edit} to make the file writable, +and CVS takes care to notify other developers of the fact that you +intend to change the file. See the CVS documentation for details on +using the watch feature. + +@vindex vc-stay-local +@vindex vc-cvs-stay-local +@cindex remote repositories (CVS) + When a file's repository is on a remote machine, VC tries to keep +network interactions to a minimum. This is controlled by the variable +@code{vc-cvs-stay-local}. There is another variable, +@code{vc-stay-local}, which enables the feature also for other back +ends that support it, including CVS. In the following, we will talk +only about @code{vc-cvs-stay-local}, but everything applies to +@code{vc-stay-local} as well. + +If @code{vc-cvs-stay-local} is @code{t} (the default), then VC uses +only the entry in the local CVS subdirectory to determine the file's +state (and possibly information returned by previous CVS commands). +One consequence of this is that when you have modified a file, and +somebody else has already checked in other changes to the file, you +are not notified of it until you actually try to commit. (But you can +try to pick up any recent changes from the repository first, using +@kbd{C-x v m @key{RET}}, +@iftex +@pxref{Merging,,,emacs, the Emacs Manual}). +@end iftex +@ifnottex +@pxref{Merging}). +@end ifnottex + + When @code{vc-cvs-stay-local} is @code{t}, VC also makes local +version backups, so that simple diff and revert operations are +completely local (@pxref{Version Backups}). + + On the other hand, if you set @code{vc-cvs-stay-local} to @code{nil}, +then VC queries the remote repository @emph{before} it decides what to +do in @code{vc-next-action} (@kbd{C-x v v}), just as it does for local +repositories. It also does not make any version backups. + + You can also set @code{vc-cvs-stay-local} to a regular expression +that is matched against the repository host name; VC then stays local +only for repositories from hosts that match the pattern. + +@vindex vc-cvs-global-switches + You can specify additional command line options to pass to all CVS +operations in the variable @code{vc-cvs-global-switches}. These +switches are inserted immediately after the @code{cvs} command, before +the name of the operation to invoke. + +@ignore + arch-tag: 140b8629-4339-4b5e-9e50-72453e51615e +@end ignore diff --git a/doc/emacs/windows.texi b/doc/emacs/windows.texi new file mode 100644 index 00000000000..fa9cadc1351 --- /dev/null +++ b/doc/emacs/windows.texi @@ -0,0 +1,387 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Windows, Frames, Buffers, Top +@chapter Multiple Windows +@cindex windows in Emacs +@cindex multiple windows in Emacs + + Emacs can split a frame into two or many windows. Multiple windows +can display parts of different buffers, or different parts of one +buffer. Multiple frames always imply multiple windows, because each +frame has its own set of windows. Each window belongs to one and only +one frame. + +@menu +* Basic Window:: Introduction to Emacs windows. +* Split Window:: New windows are made by splitting existing windows. +* Other Window:: Moving to another window or doing something to it. +* Pop Up Window:: Finding a file or buffer in another window. +* Force Same Window:: Forcing certain buffers to appear in the selected + window rather than in another window. +* Change Window:: Deleting windows and changing their sizes. +* Window Convenience:: Convenience functions for window handling. +@end menu + +@node Basic Window +@section Concepts of Emacs Windows + + Each Emacs window displays one Emacs buffer at any time. A single +buffer may appear in more than one window; if it does, any changes in +its text are displayed in all the windows where it appears. But these +windows can show different parts of the buffer, because each window +has its own value of point. + +@cindex selected window + At any time, one Emacs window is the @dfn{selected window}; the +buffer this window is displaying is the current buffer. The terminal's +cursor shows the location of point in this window. Each other window +has a location of point as well. On text-only terminals, there is no +way to show where those locations are, since the terminal has only one +cursor. On a graphical display, the location of point in a +non-selected window is indicated by a hollow box; the cursor in the +selected window is blinking or solid. + + Commands to move point affect the value of point for the selected Emacs +window only. They do not change the value of point in other Emacs +windows, even those showing the same buffer. The same is true for commands +such as @kbd{C-x b} to switch buffers in the selected window; +they do not affect other windows at all. However, there are other commands +such as @kbd{C-x 4 b} that select a different window and switch buffers in +it. Also, all commands that display information in a window, including +(for example) @kbd{C-h f} (@code{describe-function}) and @kbd{C-x C-b} +(@code{list-buffers}), work by switching buffers in a nonselected window +without affecting the selected window. + + When multiple windows show the same buffer, they can have different +regions, because they can have different values of point. However, +they all have the same value for the mark, because each buffer has +only one mark position. + + Each window has its own mode line, which displays the buffer name, +modification status and major and minor modes of the buffer that is +displayed in the window. The selected window's mode line appears in a +different color. @xref{Mode Line}, for full details on the mode line. + +@node Split Window +@section Splitting Windows + +@table @kbd +@item C-x 2 +Split the selected window into two windows, one above the other +(@code{split-window-vertically}). +@item C-x 3 +Split the selected window into two windows positioned side by side +(@code{split-window-horizontally}). +@item C-Mouse-2 +In the mode line or scroll bar of a window, split that window. +@end table + +@kindex C-x 2 +@findex split-window-vertically + The command @kbd{C-x 2} (@code{split-window-vertically}) breaks the +selected window into two windows, one above the other. Both windows start +out displaying the same buffer, with the same value of point. By default +the two windows each get half the height of the window that was split; a +numeric argument specifies how many lines to give to the top window. + +@kindex C-x 3 +@findex split-window-horizontally + @kbd{C-x 3} (@code{split-window-horizontally}) breaks the selected +window into two side-by-side windows. A numeric argument specifies how +many columns to give the one on the left. If you are not using +scrollbars, a vertical line separates the two windows. +You can customize its color with the face @code{vertical-border}. +Windows that are not the full width of the screen have mode lines, but +they are truncated. On terminals where Emacs does not support +highlighting, truncated mode lines sometimes do not appear in inverse +video. + +@kindex C-Mouse-2 @r{(scroll bar)} + You can split a window horizontally or vertically by clicking +@kbd{C-Mouse-2} in the mode line or the scroll bar. The line of +splitting goes through the place where you click: if you click on the +mode line, the new scroll bar goes above the spot; if you click in the +scroll bar, the mode line of the split window is side by side with +your click. + +@vindex truncate-partial-width-windows + When a window is less than the full width, text lines too long to +fit are frequent. Continuing all those lines might be confusing, so +if the variable @code{truncate-partial-width-windows} is +non-@code{nil}, that forces truncation in all windows less than the +full width of the screen, independent of the buffer being displayed +and its value for @code{truncate-lines}. @xref{Line Truncation}. + + Horizontal scrolling is often used in side-by-side windows. +@xref{Horizontal Scrolling}. + +@vindex split-window-keep-point + If @code{split-window-keep-point} is non-@code{nil}, the default, +both of the windows resulting from @kbd{C-x 2} inherit the value of +point from the window that was split. This means that scrolling is +inevitable. If this variable is @code{nil}, then @kbd{C-x 2} tries to +avoid scrolling the text currently visible on the screen, by putting +point in each window at a position already visible in the window. It +also selects whichever window contains the screen line that the cursor +was previously on. Some users prefer that mode on slow terminals. + +@node Other Window +@section Using Other Windows + +@table @kbd +@item C-x o +Select another window (@code{other-window}). That is @kbd{o}, not zero. +@item C-M-v +Scroll the next window (@code{scroll-other-window}). +@item M-x compare-windows +Find next place where the text in the selected window does not match +the text in the next window. +@item Mouse-1 +@kbd{Mouse-1}, in a window's mode line, selects that window +but does not move point in it (@code{mouse-select-window}). +@end table + +@kindex C-x o +@findex other-window + To select a different window, click with @kbd{Mouse-1} on its mode +line. With the keyboard, you can switch windows by typing @kbd{C-x o} +(@code{other-window}). That is an @kbd{o}, for ``other,'' not a zero. +When there are more than two windows, this command moves through all the +windows in a cyclic order, generally top to bottom and left to right. +After the rightmost and bottommost window, it goes back to the one at +the upper left corner. A numeric argument means to move several steps +in the cyclic order of windows. A negative argument moves around the +cycle in the opposite order. When the minibuffer is active, the +minibuffer is the last window in the cycle; you can switch from the +minibuffer window to one of the other windows, and later switch back and +finish supplying the minibuffer argument that is requested. +@xref{Minibuffer Edit}. + +@kindex C-M-v +@findex scroll-other-window + The usual scrolling commands (@pxref{Display}) apply to the selected +window only, but there is one command to scroll the next window. +@kbd{C-M-v} (@code{scroll-other-window}) scrolls the window that +@kbd{C-x o} would select. It takes arguments, positive and negative, +like @kbd{C-v}. (In the minibuffer, @kbd{C-M-v} scrolls the window +that contains the minibuffer help display, if any, rather than the +next window in the standard cyclic order.) + + The command @kbd{M-x compare-windows} lets you compare two files or +buffers visible in two windows, by moving through them to the next +mismatch. @xref{Comparing Files}, for details. + +@vindex mouse-autoselect-window + If you set @code{mouse-autoselect-window} to a non-@code{nil} value, +moving the mouse into a different window selects that window. This +feature is off by default. + +@node Pop Up Window +@section Displaying in Another Window + +@cindex selecting buffers in other windows +@kindex C-x 4 + @kbd{C-x 4} is a prefix key for commands that select another window +(splitting the window if there is only one) and select a buffer in that +window. Different @kbd{C-x 4} commands have different ways of finding the +buffer to select. + +@table @kbd +@item C-x 4 b @var{bufname} @key{RET} +Select buffer @var{bufname} in another window. This runs +@code{switch-to-buffer-other-window}. +@item C-x 4 C-o @var{bufname} @key{RET} +Display buffer @var{bufname} in another window, but +don't select that buffer or that window. This runs +@code{display-buffer}. +@item C-x 4 f @var{filename} @key{RET} +Visit file @var{filename} and select its buffer in another window. This +runs @code{find-file-other-window}. @xref{Visiting}. +@item C-x 4 d @var{directory} @key{RET} +Select a Dired buffer for directory @var{directory} in another window. +This runs @code{dired-other-window}. @xref{Dired}. +@item C-x 4 m +Start composing a mail message in another window. This runs +@code{mail-other-window}; its same-window analogue is @kbd{C-x m} +(@pxref{Sending Mail}). +@item C-x 4 . +Find a tag in the current tags table, in another window. This runs +@code{find-tag-other-window}, the multiple-window variant of @kbd{M-.} +(@pxref{Tags}). +@item C-x 4 r @var{filename} @key{RET} +Visit file @var{filename} read-only, and select its buffer in another +window. This runs @code{find-file-read-only-other-window}. +@xref{Visiting}. +@end table + +@node Force Same Window +@section Forcing Display in the Same Window + + Certain Emacs commands switch to a specific buffer with special +contents. For example, @kbd{M-x shell} switches to a buffer named +@samp{*shell*}. By convention, all these commands are written to pop up +the buffer in a separate window. But you can specify that certain of +these buffers should appear in the selected window. + +@vindex same-window-buffer-names + If you add a buffer name to the list @code{same-window-buffer-names}, +the effect is that such commands display that particular buffer by +switching to it in the selected window. For example, if you add the +element @code{"*grep*"} to the list, the @code{grep} command will +display its output buffer in the selected window. + + The default value of @code{same-window-buffer-names} is not +@code{nil}: it specifies buffer names @samp{*info*}, @samp{*mail*} and +@samp{*shell*} (as well as others used by more obscure Emacs packages). +This is why @kbd{M-x shell} normally switches to the @samp{*shell*} +buffer in the selected window. If you delete this element from the +value of @code{same-window-buffer-names}, the behavior of @kbd{M-x +shell} will change---it will pop up the buffer in another window +instead. + +@vindex same-window-regexps + You can specify these buffers more generally with the variable +@code{same-window-regexps}. Set it to a list of regular expressions; +then any buffer whose name matches one of those regular expressions is +displayed by switching to it in the selected window. (Once again, this +applies only to buffers that normally get displayed for you in a +separate window.) The default value of this variable specifies Telnet +and rlogin buffers. + + An analogous feature lets you specify buffers which should be +displayed in their own individual frames. @xref{Special Buffer Frames}. + +@node Change Window +@section Deleting and Rearranging Windows + +@table @kbd +@item C-x 0 +Delete the selected window (@code{delete-window}). The last character +in this key sequence is a zero. +@item C-x 1 +Delete all windows in the selected frame except the selected window +(@code{delete-other-windows}). +@item C-x 4 0 +Delete the selected window and kill the buffer that was showing in it +(@code{kill-buffer-and-window}). The last character in this key +sequence is a zero. +@item C-x ^ +Make selected window taller (@code{enlarge-window}). +@item C-x @} +Make selected window wider (@code{enlarge-window-horizontally}). +@item C-x @{ +Make selected window narrower (@code{shrink-window-horizontally}). +@item C-x - +Shrink this window if its buffer doesn't need so many lines +(@code{shrink-window-if-larger-than-buffer}). +@item C-x + +Make all windows the same height (@code{balance-windows}). +@end table + +@kindex C-x 0 +@findex delete-window + To delete a window, type @kbd{C-x 0} (@code{delete-window}). (That is +a zero.) The space occupied by the deleted window is given to an +adjacent window (but not the minibuffer window, even if that is active +at the time). Once a window is deleted, its attributes are forgotten; +only restoring a window configuration can bring it back. Deleting the +window has no effect on the buffer it used to display; the buffer +continues to exist, and you can select it in any window with @kbd{C-x +b}. + +@findex kill-buffer-and-window +@kindex C-x 4 0 + @kbd{C-x 4 0} (@code{kill-buffer-and-window}) is a stronger command +than @kbd{C-x 0}; it kills the current buffer and then deletes the +selected window. + +@kindex C-x 1 +@findex delete-other-windows + @kbd{C-x 1} (@code{delete-other-windows}) is more powerful in a +different way; it deletes all the windows except the selected one (and +the minibuffer); the selected window expands to use the whole frame +except for the echo area. + +@kindex C-x ^ +@findex enlarge-window +@kindex C-x @} +@findex enlarge-window-horizontally +@vindex window-min-height +@vindex window-min-width + To readjust the division of space among vertically adjacent windows, +use @kbd{C-x ^} (@code{enlarge-window}). It makes the currently +selected window one line bigger, or as many lines as is specified +with a numeric argument. With a negative argument, it makes the +selected window smaller. @kbd{C-x @}} +(@code{enlarge-window-horizontally}) makes the selected window wider by +the specified number of columns. @kbd{C-x @{} +(@code{shrink-window-horizontally}) makes the selected window narrower +by the specified number of columns. + + When you make a window bigger, the space comes from its peers. If +this makes any window too small, it is deleted and its space is given +to an adjacent window. The minimum size is specified by the variables +@code{window-min-height} and @code{window-min-width}. + +@kindex C-x - +@findex shrink-window-if-larger-than-buffer + The command @kbd{C-x -} (@code{shrink-window-if-larger-than-buffer}) +reduces the height of the selected window, if it is taller than +necessary to show the whole text of the buffer it is displaying. It +gives the extra lines to other windows in the frame. + +@kindex C-x + +@findex balance-windows + You can also use @kbd{C-x +} (@code{balance-windows}) to even out the +heights of all the windows in the selected frame. + + Mouse clicks on the mode line provide another way to change window +heights and to delete windows. @xref{Mode Line Mouse}. + +@node Window Convenience +@section Window Handling Convenience Features and Customization + +@findex winner-mode +@cindex Winner mode +@cindex mode, Winner +@cindex undoing window configuration changes +@cindex window configuration changes, undoing + @kbd{M-x winner-mode} is a global minor mode that records the +changes in the window configuration (i.e. how the frames are +partitioned into windows), so that you can ``undo'' them. To undo, +use @kbd{C-c left} (@code{winner-undo}). If you change your mind +while undoing, you can redo the changes you had undone using @kbd{C-c +right} (@code{M-x winner-redo}). Another way to enable Winner mode is +by customizing the variable @code{winner-mode}. + +@cindex Windmove package +@cindex directional window selection +@findex windmove-right +@findex windmove-default-keybindings + The Windmove commands move directionally between neighboring windows in +a frame. @kbd{M-x windmove-right} selects the window immediately to the +right of the currently selected one, and similarly for the ``left,'' ``up,'' +and ``down'' counterparts. @kbd{M-x windmove-default-keybindings} binds +these commands to @kbd{S-right} etc. (Not all terminals support shifted +arrow keys, however.) + + Follow minor mode (@kbd{M-x follow-mode}) synchronizes several +windows on the same buffer so that they always display adjacent +sections of that buffer. @xref{Follow Mode}. + +@vindex scroll-all-mode +@cindex scrolling windows together +@cindex Scroll-all mode +@cindex mode, Scroll-all + @kbd{M-x scroll-all-mode} provides commands to scroll all visible +windows together. You can also turn it on by customizing the variable +@code{scroll-all-mode}. The commands provided are @kbd{M-x +scroll-all-scroll-down-all}, @kbd{M-x scroll-all-page-down-all} and +their corresponding ``up'' equivalents. To make this mode useful, +you should bind these commands to appropriate keys. + +@ignore + arch-tag: 8bea7453-d4b1-49b1-9bf4-cfe4383e1113 +@end ignore diff --git a/doc/emacs/xresources.texi b/doc/emacs/xresources.texi new file mode 100644 index 00000000000..c402ec89f88 --- /dev/null +++ b/doc/emacs/xresources.texi @@ -0,0 +1,1216 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1987, 1993, 1994, 1995, 1997, 2001, 2002, 2003, +@c 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node X Resources, Antinews, Emacs Invocation, Top +@appendix X Options and Resources + + You can customize some X-related aspects of Emacs behavior using X +resources, as is usual for programs that use X. On MS-Windows, you +can customize some of the same aspects using the system registry. +@xref{MS-Windows Registry}. Likewise, Emacs on MacOS Carbon emulates X +resources using the Preferences system. @xref{Mac Environment Variables}. + + When Emacs is built using an ``X toolkit'', such as Lucid or +LessTif, you need to use X resources to customize the appearance of +the widgets, including the menu-bar, scroll-bar, and dialog boxes. +This is because the libraries that implement these don't provide for +customization through Emacs. GTK+ widgets use a separate system of +@ifnottex +``GTK resources'', which we will also describe. +@end ifnottex +@iftex +``GTK resources.'' In this chapter we describe the most commonly used +resource specifications. For full documentation, see the online +manual. + +@c Add xref for LessTif/Motif menu resources. +@end iftex + + +@menu +* Resources:: Using X resources with Emacs (in general). +* Table of Resources:: Table of specific X resources that affect Emacs. +* Face Resources:: X resources for customizing faces. +* Lucid Resources:: X resources for Lucid menus. +* LessTif Resources:: X resources for LessTif and Motif menus. +* GTK resources:: Resources for GTK widgets. +@end menu + +@node Resources +@appendixsec X Resources +@cindex resources +@cindex X resources +@cindex @file{~/.Xdefaults} file +@cindex @file{~/.Xresources} file + + Programs running under the X Window System organize their user +options under a hierarchy of classes and resources. You can specify +default values for these options in your X resources file, usually +named @file{~/.Xdefaults} or @file{~/.Xresources}. +If changes in @file{~/.Xdefaults} do not +take effect, it is because your X server stores its own list of +resources; to update them, use the shell command @command{xrdb}---for +instance, @samp{xrdb ~/.Xdefaults}. + + Each line in the file specifies a value for one option or for a +collection of related options, for one program or for several programs +(optionally even for all programs). + +@cindex Registry (MS-Windows) + MS-Windows systems do not support @file{~/.Xdefaults} files, so +instead Emacs compiled for Windows looks for X resources in the +Windows Registry, first under the key +@samp{HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs} and then under the key +@samp{HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs}. The menu and scroll +bars are native widgets on MS-Windows, so they are only customizable +via the system-wide settings in the Display Control Panel. You can +also set resources using the @samp{-xrm} command line option (see +below.) + +@iftex + Applications such as Emacs look for resources with specific names +and their particular meanings. Case distinctions are significant in +these names. Each resource specification in @file{~/.Xdefaults} +states the name of the program and the name of the resource. For +Emacs, the program name is @samp{Emacs}. It looks like this: + +@example +Emacs.borderWidth: 2 +@end example +@end iftex +@ifnottex + Programs define named resources with particular meanings. They also +define how to group resources into named classes. For instance, in +Emacs, the @samp{internalBorder} resource controls the width of the +internal border, and the @samp{borderWidth} resource controls the width +of the external border. Both of these resources are part of the +@samp{BorderWidth} class. Case distinctions are significant in these +names. + + Every resource definition is associated with a specific program +name---the name of the executable file that you ran. For Emacs, that +is normally @samp{emacs}. To specify a definition for all instances +of Emacs, regardless of their names, use @samp{Emacs}. + + In @file{~/.Xdefaults}, you can specify a value for a single resource +on one line, like this: + +@example +emacs.borderWidth: 2 +@end example + +@noindent +Or you can use a class name to specify the same value for all resources +in that class. Here's an example: + +@example +emacs.BorderWidth: 2 +@end example + + If you specify a value for a class, it becomes the default for all +resources in that class. You can specify values for individual +resources as well; these override the class value, for those particular +resources. Thus, this example specifies 2 as the default width for all +borders, but overrides this value with 4 for the external border: + +@example +emacs.BorderWidth: 2 +emacs.borderWidth: 4 +@end example +@end ifnottex + + The order in which the lines appear in the file does not matter. +Also, command-line options always override the X resources file. + +@ifnottex +Here is a list of X command-line options and their corresponding +resource names. + +@table @samp +@item -name @var{name} +@opindex --name +@itemx --name=@var{name} +@cindex resource name, command-line argument +Use @var{name} as the resource name (and the title) for the initial +Emacs frame. This option does not affect subsequent frames, but Lisp +programs can specify frame names when they create frames. + +If you don't specify this option, the default is to use the Emacs +executable's name as the resource name. + +@item -xrm @var{resource-values} +@opindex --xrm +@itemx --xrm=@var{resource-values} +@cindex resource values, command-line argument +Specify X resource values for this Emacs job (see below). +@end table + + For consistency, @samp{-name} also specifies the name to use for +other resource values that do not belong to any particular frame. + + The resources that name Emacs invocations also belong to a class; its +name is @samp{Emacs}. If you write @samp{Emacs} instead of +@samp{emacs}, the resource applies to all frames in all Emacs jobs, +regardless of frame titles and regardless of the name of the executable +file. Here is an example: + +@example +Emacs.BorderWidth: 2 +Emacs.borderWidth: 4 +@end example + + You can specify a string of additional resource values for Emacs to +use with the command line option @samp{-xrm @var{resources}}. The text +@var{resources} should have the same format that you would use inside a file +of X resources. To include multiple resource specifications in +@var{resources}, put a newline between them, just as you would in a file. +You can also use @samp{#include "@var{filename}"} to include a file full +of resource specifications. Resource values specified with @samp{-xrm} +take precedence over all other resource specifications. + + One way to experiment with the effect of different resource settings +is to use the @code{editres} program. Select @samp{Get Tree} from the +@end ifnottex +@iftex + You can experiment with the effect of different resource settings +with the @code{editres} program. Select @samp{Get Tree} from the +@end iftex +@samp{Commands} menu, then click on an Emacs frame. This will display +a tree showing the structure of X toolkit widgets used in an Emacs +frame. Select one of them, such as @samp{menubar}, then select +@samp{Show Resource Box} from the @samp{Commands} menu. This displays +a list of all the meaningful X resources for that widget, and allows +you to edit them. Changes take effect when you click on the +@samp{Apply} button. (See the @code{editres} man page for more +details.) + +@node Table of Resources +@appendixsec Table of X Resources for Emacs + + This table lists the resource names that designate options for +Emacs, not counting those for the appearance of the menu bar, each +with the class that it belongs to: + +@table @asis +@item @code{background} (class @code{Background}) +Background color name. + +@ifnottex +@item @code{bitmapIcon} (class @code{BitmapIcon}) +Use a bitmap icon (a picture of a gnu) if @samp{on}, let the window +manager choose an icon if @samp{off}. +@end ifnottex + +@item @code{borderColor} (class @code{BorderColor}) +Color name for the external border. + +@ifnottex +@item @code{borderWidth} (class @code{BorderWidth}) +Width in pixels of the external border. +@end ifnottex + +@item @code{cursorColor} (class @code{Foreground}) +Color name for text cursor (point). + +@ifnottex +@item @code{cursorBlink} (class @code{CursorBlink}) +Specifies whether to make the cursor blink. The default is @samp{on}. Use +@samp{off} or @samp{false} to turn cursor blinking off. +@end ifnottex + +@item @code{font} (class @code{Font}) +Font name (or fontset name, @pxref{Fontsets}) for @code{default} font. + +@item @code{foreground} (class @code{Foreground}) +Color name for text. + +@item @code{geometry} (class @code{Geometry}) +Window size and position. Be careful not to specify this resource as +@samp{emacs*geometry}, because that may affect individual menus as well +as the Emacs frame itself. + +If this resource specifies a position, that position applies only to the +initial Emacs frame (or, in the case of a resource for a specific frame +name, only that frame). However, the size, if specified here, applies to +all frames. + +@ifnottex +@item @code{fullscreen} (class @code{Fullscreen}) +The desired fullscreen size. The value can be one of @code{fullboth}, +@code{fullwidth} or @code{fullheight}, which correspond to +the command-line options @samp{-fs}, @samp{-fw}, and @samp{-fh} +(@pxref{Window Size X}). + +Note that this applies to the initial frame only. +@end ifnottex + +@item @code{iconName} (class @code{Title}) +Name to display in the icon. + +@item @code{internalBorder} (class @code{BorderWidth}) +Width in pixels of the internal border. + +@item @code{lineSpacing} (class @code{LineSpacing}) +@cindex line spacing +@cindex leading +Additional space (@dfn{leading}) between lines, in pixels. + +@item @code{menuBar} (class @code{MenuBar}) +@cindex menu bar +Give frames menu bars if @samp{on}; don't have menu bars if @samp{off}. +@ifnottex +@xref{Lucid Resources}, and @ref{LessTif Resources}, +@end ifnottex +@iftex +@xref{Lucid Resources}, +@end iftex +for how to control the appearance of the menu bar if you have one. + +@ifnottex +@item @code{minibuffer} (class @code{Minibuffer}) +If @samp{none}, don't make a minibuffer in this frame. +It will use a separate minibuffer frame instead. + +@item @code{paneFont} (class @code{Font}) +@cindex font for menus +Font name for menu pane titles, in non-toolkit versions of Emacs. +@end ifnottex + +@item @code{pointerColor} (class @code{Foreground}) +Color of the mouse cursor. + +@ifnottex +@item @code{privateColormap} (class @code{PrivateColormap}) +If @samp{on}, use a private color map, in the case where the ``default +visual'' of class PseudoColor and Emacs is using it. + +@item @code{reverseVideo} (class @code{ReverseVideo}) +Switch foreground and background default colors if @samp{on}, use colors as +specified if @samp{off}. +@end ifnottex + +@item @code{screenGamma} (class @code{ScreenGamma}) +@cindex gamma correction +Gamma correction for colors, equivalent to the frame parameter +@code{screen-gamma}. + +@item @code{scrollBarWidth} (class @code{ScrollBarWidth}) +@cindex scrollbar width +The scroll bar width in pixels, equivalent to the frame parameter +@code{scroll-bar-width}. + +@ifnottex +@item @code{selectionFont} (class @code{SelectionFont}) +Font name for pop-up menu items, in non-toolkit versions of Emacs. (For +toolkit versions, see @ref{Lucid Resources}, also see @ref{LessTif +Resources}.) + +@item @code{selectionTimeout} (class @code{SelectionTimeout}) +Number of milliseconds to wait for a selection reply. +If the selection owner doesn't reply in this time, we give up. +A value of 0 means wait as long as necessary. + +@item @code{synchronous} (class @code{Synchronous}) +@cindex debugging X problems +@cindex synchronous X mode +Run Emacs in synchronous mode if @samp{on}. Synchronous mode is +useful for debugging X problems. +@end ifnottex + +@item @code{title} (class @code{Title}) +Name to display in the title bar of the initial Emacs frame. + +@item @code{toolBar} (class @code{ToolBar}) +@cindex tool bar +Number of lines to reserve for the tool bar. A zero value suppresses +the tool bar. If the value is non-zero and +@code{auto-resize-tool-bars} is non-@code{nil}, the tool bar's size +will be changed automatically so that all tool bar items are visible. + If the value of @code{auto-resize-tool-bars} is @code{grow-only}, +the tool bar expands automatically, but does not contract automatically. +To contract the tool bar, you must redraw the frame by entering @kbd{C-l}. + +@item @code{useXIM} (class @code{UseXIM}) +@cindex XIM +@cindex X input methods +@cindex input methods, X +Turn off use of X input methods (XIM) if @samp{false} or @samp{off}. +This is only relevant if your Emacs is actually built with XIM +support. It is potentially useful to turn off XIM for efficiency, +especially slow X client/server links. + +@item @code{verticalScrollBars} (class @code{ScrollBars}) +Give frames scroll bars if @samp{on}; don't have scroll bars if +@samp{off}. + +@ifnottex +@item @code{visualClass} (class @code{VisualClass}) +Specify the ``visual'' that X should use. This tells X how to handle +colors. + +The value should start with one of @samp{TrueColor}, +@samp{PseudoColor}, @samp{DirectColor}, @samp{StaticColor}, +@samp{GrayScale}, and @samp{StaticGray}, followed by +@samp{-@var{depth}}, where @var{depth} is the number of color planes. +Most terminals only allow a few ``visuals,'' and the @samp{dpyinfo} +program outputs information saying which ones. +@end ifnottex +@end table + +@node Face Resources +@appendixsec X Resources for Faces + + You can use resources to customize the appearance of particular +faces (@pxref{Faces}): + +@table @code +@item @var{face}.attributeForeground +Foreground color for face @var{face}. +@item @var{face}.attributeBackground +Background color for face @var{face}. +@item @var{face}.attributeUnderline +Underline flag for face @var{face}. Use @samp{on} or @samp{true} for +yes. +@item @var{face}.attributeStrikeThrough +@itemx @var{face}.attributeOverline +@itemx @var{face}.attributeBox +@itemx @var{face}.attributeInverse +Likewise, for other boolean font attributes. +@item @var{face}.attributeStipple +The name of a pixmap data file to use for the stipple pattern, or +@code{false} to not use stipple for the face @var{face}. +@item @var{face}.attributeBackgroundPixmap +The background pixmap for the face @var{face}. Should be a name of a +pixmap file or @code{false}. +@item @var{face}.attributeFont +Font name (full XFD name or valid X abbreviation) for face @var{face}. +Instead of this, you can specify the font through separate attributes. +@end table + + Instead of using @code{attributeFont} to specify a font name, you can +select a font through these separate attributes: + +@table @code +@item @var{face}.attributeFamily +Font family for face @var{face}. +@item @var{face}.attributeHeight +Height of the font to use for face @var{face}: either an integer +specifying the height in units of 1/10@dmn{pt}, or a floating point +number that specifies a scale factor to scale the underlying face's +default font, or a function to be called with the default height which +will return a new height. +@item @var{face}.attributeWidth +@itemx @var{face}.attributeWeight +@itemx @var{face}.attributeSlant +Each of these resources corresponds to a like-named font attribute, +and you write the resource value the same as the symbol you would use +for the font attribute value. +@item @var{face}.attributeBold +Bold flag for face @var{face}---instead of @code{attributeWeight}. Use @samp{on} or @samp{true} for +yes. +@item @var{face}.attributeItalic +Italic flag for face @var{face}---instead of @code{attributeSlant}. +@end table + +@node Lucid Resources +@appendixsec Lucid Menu X Resources +@cindex Menu X Resources (Lucid widgets) +@cindex Lucid Widget X Resources + +@ifnottex + If the Emacs installed at your site was built to use the X toolkit +with the Lucid menu widgets, then the menu bar is a separate widget and +has its own resources. The resource names contain @samp{pane.menubar} +(following, as always, the name of the Emacs invocation, or @samp{Emacs}, +which stands for all Emacs invocations). Specify them like this: + +@example +Emacs.pane.menubar.@var{resource}: @var{value} +@end example + +@noindent +For example, to specify the font @samp{8x16} for the menu-bar items, +write this: +@end ifnottex +@iftex + If the Emacs installed at your site was built to use the X toolkit +with the Lucid menu widgets, then the menu bar is a separate widget +and has its own resources. The resource specifications start with +@samp{Emacs.pane.menubar}---for instance, to specify the font +@samp{8x16} for the menu-bar items, write this: +@end iftex + +@example +Emacs.pane.menubar.font: 8x16 +@end example + +@noindent +Resources for @emph{non-menubar} toolkit pop-up menus have +@samp{menu*} instead of @samp{pane.menubar}. For example, to specify +the font @samp{8x16} for the pop-up menu items, write this: + +@example +Emacs.menu*.font: 8x16 +@end example + +@noindent +For dialog boxes, use @samp{dialog*}: + +@example +Emacs.dialog*.font: 8x16 +@end example + +@noindent +The Lucid menus can display multilingual text in your locale. For +more information about fontsets see the man page for +@code{XCreateFontSet}. To enable multilingual menu text you specify a +@code{fontSet} resource instead of the font resource. If both +@code{font} and @code{fontSet} resources are specified, the +@code{fontSet} resource is used. + + Thus, to specify @samp{-*-helvetica-medium-r-*--*-120-*-*-*-*-*-*,*} +for both the popup and menu bar menus, write this: + +@example +Emacs*menu*fontSet: -*-helvetica-medium-r-*--*-120-*-*-*-*-*-*,* +@end example + +@noindent +The @samp{*menu*} as a wildcard matches @samp{pane.menubar} and +@samp{menu@dots{}}. + +Experience shows that on some systems you may need to add +@samp{shell.}@: before the @samp{pane.menubar} or @samp{menu*}. On +some other systems, you must not add @samp{shell.}. The generic wildcard +approach should work on both kinds of systems. + + Here is a list of the specific resources for menu bars and pop-up menus: + +@table @code +@item font +Font for menu item text. +@item fontSet +Fontset for menu item text. +@item foreground +Color of the foreground. +@item background +Color of the background. +@item buttonForeground +In the menu bar, the color of the foreground for a selected item. +@ifnottex +@item horizontalSpacing +Horizontal spacing in pixels between items. Default is 3. +@item verticalSpacing +Vertical spacing in pixels between items. Default is 2. +@item arrowSpacing +Horizontal spacing between the arrow (which indicates a submenu) and +the associated text. Default is 10. +@item shadowThickness +Thickness of shadow line around the widget. Default is 1. + +Also determines the thickness of shadow lines around other objects, +for instance 3D buttons and arrows. If you have the impression that +the arrows in the menus do not stand out clearly enough or that the +difference between ``in'' and ``out'' buttons is difficult to see, set +this to 2. If you have no problems with visibility, the default +probably looks better. The background color may also have some effect +on the contrast. +@end ifnottex +@item margin +The margin of the menu bar, in characters. Default is 1. +@end table + +@ifnottex +@node LessTif Resources +@appendixsec LessTif Menu X Resources +@cindex Menu X Resources (LessTif widgets) +@cindex LessTif Widget X Resources + + If the Emacs installed at your site was built to use the X toolkit +with the LessTif or Motif widgets, then the menu bar, the dialog +boxes, the pop-up menus, and the file-selection box are separate +widgets and have their own resources. + + The resource names for the menu bar contain @samp{pane.menubar} +(following, as always, the name of the Emacs invocation, or +@samp{Emacs}, which stands for all Emacs invocations). Specify them +like this: + +@smallexample +Emacs.pane.menubar.@var{subwidget}.@var{resource}: @var{value} +@end smallexample + + Each individual string in the menu bar is a subwidget; the subwidget's +name is the same as the menu item string. For example, the word +@samp{File} in the menu bar is part of a subwidget named +@samp{emacs.pane.menubar.File}. Most likely, you want to specify the +same resources for the whole menu bar. To do this, use @samp{*} instead +of a specific subwidget name. For example, to specify the font +@samp{8x16} for the menu-bar items, write this: + +@smallexample +Emacs.pane.menubar.*.fontList: 8x16 +@end smallexample + +@noindent +This also specifies the resource value for submenus. + + Each item in a submenu in the menu bar also has its own name for X +resources; for example, the @samp{File} submenu has an item named +@samp{Save (current buffer)}. A resource specification for a submenu +item looks like this: + +@smallexample +Emacs.pane.menubar.popup_*.@var{menu}.@var{item}.@var{resource}: @var{value} +@end smallexample + +@noindent +For example, here's how to specify the font for the @samp{Save (current +buffer)} item: + +@smallexample +Emacs.pane.menubar.popup_*.File.Save (current buffer).fontList: 8x16 +@end smallexample + +@noindent +For an item in a second-level submenu, such as @samp{Complete Word} +under @samp{Spell Checking} under @samp{Tools}, the resource fits this +template: + +@smallexample +Emacs.pane.menubar.popup_*.popup_*.@var{menu}.@var{resource}: @var{value} +@end smallexample + +@noindent +For example, + +@smallexample +Emacs.pane.menubar.popup_*.popup_*.Spell Checking.Complete Word: @var{value} +@end smallexample + +@noindent +(This should be one long line.) + + It's impossible to specify a resource for all the menu-bar items +without also specifying it for the submenus as well. So if you want the +submenu items to look different from the menu bar itself, you must ask +for that in two steps. First, specify the resource for all of them; +then, override the value for submenus alone. Here is an example: + +@smallexample +Emacs.pane.menubar.*.fontList: 8x16 +Emacs.pane.menubar.popup_*.fontList: 8x16 +@end smallexample + +@noindent +For LessTif pop-up menus, use @samp{menu*} instead of +@samp{pane.menubar}. For example, to specify the font @samp{8x16} for +the pop-up menu items, write this: + +@smallexample +Emacs.menu*.fontList: 8x16 +@end smallexample + +@noindent +For LessTif dialog boxes, use @samp{dialog} instead of @samp{menu}: + +@example +Emacs.dialog*.fontList: 8x16 +Emacs.dialog*.foreground: hotpink +@end example + +To specify resources for the LessTif file-selection box, use +@samp{fsb*}, like this: + +@example +Emacs.fsb*.fontList: 8x16 +@end example + +@iftex +@medbreak +@end iftex + Here is a list of the specific resources for LessTif menu bars and +pop-up menus: + +@table @code +@item armColor +The color to show in an armed button. +@item fontList +The font to use. +@item marginBottom +@itemx marginHeight +@itemx marginLeft +@itemx marginRight +@itemx marginTop +@itemx marginWidth +Amount of space to leave around the item, within the border. +@item borderWidth +The width of the border around the menu item, on all sides. +@item shadowThickness +The width of the border shadow. +@item bottomShadowColor +The color for the border shadow, on the bottom and the right. +@item topShadowColor +The color for the border shadow, on the top and the left. +@end table +@end ifnottex + + +@node GTK resources +@appendixsec GTK resources +@iftex + The most common way to customize the GTK widgets Emacs uses (menus, dialogs +tool bars and scroll bars) is by choosing an appropriate theme, for example +with the GNOME theme selector. You can also do Emacs specific customization +by inserting GTK style directives in the file @file{~/.emacs.d/gtkrc}. Some GTK +themes ignore customizations in @file{~/.emacs.d/gtkrc} so not everything +works with all themes. To customize Emacs font, background, faces, etc., use +the normal X resources (@pxref{Resources}). We will present some examples of +customizations here, but for a more detailed description, see the online manual + + The first example is just one line. It changes the font on all GTK widgets +to courier with size 12: + +@smallexample +gtk-font-name = "courier 12" +@end smallexample + + The thing to note is that the font name is not an X font name, like +-*-helvetica-medium-r-*--*-120-*-*-*-*-*-*, but a Pango font name. A Pango +font name is basically of the format "family style size", where the style +is optional as in the case above. A name with a style could be for example: + +@smallexample +gtk-font-name = "helvetica bold 10" +@end smallexample + + To customize widgets you first define a style and then apply the style to +the widgets. Here is an example that sets the font for menus, but not +for other widgets: + +@smallexample +# @r{Define the style @samp{menufont}.} +style "menufont" +@{ + font_name = "helvetica bold 14" # This is a Pango font name +@} + +# @r{Specify that widget type @samp{*emacs-menuitem*} uses @samp{menufont}.} +widget "*emacs-menuitem*" style "menufont" +@end smallexample + +The widget name in this example contains wildcards, so the style will be +applied to all widgets that match "*emacs-menuitem*". The widgets are +named by the way they are contained, from the outer widget to the inner widget. +So to apply the style "my_style" (not shown) with the full, absolute name, for +the menubar and the scroll bar in Emacs we use: + +@smallexample +widget "Emacs.pane.menubar" style "my_style" +widget "Emacs.pane.emacs.verticalScrollBar" style "my_style" +@end smallexample + +But to avoid having to type it all, wildcards are often used. @samp{*} +matches zero or more characters and @samp{?} matches one character. So "*" +matches all widgets. + + Each widget has a class (for example GtkMenuItem) and a name (emacs-menuitem). +You can assign styles by name or by class. In this example we have used the +class: + +@smallexample +style "menufont" +@{ + font_name = "helvetica bold 14" +@} + +widget_class "*GtkMenuBar" style "menufont" +@end smallexample + +@noindent +The names and classes for the GTK widgets Emacs uses are: + +@multitable {@code{verticalScrollbar plus}} {@code{GtkFileSelection} and some} +@item @code{emacs-filedialog} +@tab @code{GtkFileSelection} +@item @code{emacs-dialog} +@tab @code{GtkDialog} +@item @code{Emacs} +@tab @code{GtkWindow} +@item @code{pane} +@tab @code{GtkVHbox} +@item @code{emacs} +@tab @code{GtkFixed} +@item @code{verticalScrollBar} +@tab @code{GtkVScrollbar} +@item @code{emacs-toolbar} +@tab @code{GtkToolbar} +@item @code{menubar} +@tab @code{GtkMenuBar} +@item @code{emacs-menuitem} +@tab anything in menus +@end multitable + + GTK absolute names are quite strange when it comes to menus +and dialogs. The names do not start with @samp{Emacs}, as they are +free-standing windows and not contained (in the GTK sense) by the +Emacs GtkWindow. To customize the dialogs and menus, use wildcards like this: + +@smallexample +widget "*emacs-dialog*" style "my_dialog_style" +widget "*emacs-filedialog* style "my_file_style" +widget "*emacs-menuitem* style "my_menu_style" +@end smallexample + + If you specify a customization in @file{~/.emacs.d/gtkrc}, then it +automatically applies only to Emacs, since other programs don't read +that file. For example, the drop down menu in the file dialog can not +be customized by any absolute widget name, only by an absolute class +name. This is because the widgets in the drop down menu do not +have names and the menu is not contained in the Emacs GtkWindow. To +have all menus in Emacs look the same, use this in +@file{~/.emacs.d/gtkrc}: + +@smallexample +widget_class "*Menu*" style "my_menu_style" +@end smallexample + + Here is a more elaborate example, showing how to change the parts of +the scroll bar: + +@smallexample +style "scroll" +@{ + fg[NORMAL] = "red"@ @ @ @ @ # @r{The arrow color.} + bg[NORMAL] = "yellow"@ @ # @r{The thumb and background around the arrow.} + bg[ACTIVE] = "blue"@ @ @ @ # @r{The trough color.} + bg[PRELIGHT] = "white"@ # @r{The thumb color when the mouse is over it.} +@} + +widget "*verticalScrollBar*" style "scroll" +@end smallexample +@end iftex + +@ifnottex +@cindex GTK resources and customization +@cindex resource files for GTK +@cindex @file{~/.gtkrc-2.0} file +@cindex @file{~/.emacs.d/gtkrc} file + + If Emacs was built to use the GTK widget set, then the menu bar, tool bar, +scroll bar and the dialogs are customized with the standard GTK +customization file, @file{~/.gtkrc-2.0}, or with the Emacs specific +file @file{~/.emacs.d/gtkrc}. We recommend that you use +@file{~/.emacs.d/gtkrc} for customizations, since @file{~/.gtkrc-2.0} +seems to be ignored when running GConf with GNOME. These files apply +only to GTK widget features. To customize Emacs font, background, +faces, etc., use the normal X resources (@pxref{Resources}). + + Some GTK themes override these mechanisms, which means that using +these mechanisms will not work to customize them. + + In these files you first define a style and say what it means; then +you specify to apply the style to various widget types (@pxref{GTK +widget names}). Here is an example of how to change the font for +Emacs menus: + +@smallexample +# @r{Define the style @samp{menufont}.} +style "menufont" +@{ + font_name = "helvetica bold 14" # This is a Pango font name +@} + +# @r{Specify that widget type @samp{*emacs-menuitem*} uses @samp{menufont}.} +widget "*emacs-menuitem*" style "menufont" +@end smallexample + + Here is a more elaborate example, showing how to change the parts of +the scroll bar: + +@smallexample +style "scroll" +@{ + fg[NORMAL] = "red"@ @ @ @ @ # @r{The arrow color.} + bg[NORMAL] = "yellow"@ @ # @r{The thumb and background around the arrow.} + bg[ACTIVE] = "blue"@ @ @ @ # @r{The trough color.} + bg[PRELIGHT] = "white"@ # @r{The thumb color when the mouse is over it.} +@} + +widget "*verticalScrollBar*" style "scroll" +@end smallexample + + There are also parameters that affect GTK as a whole. For example, +the property @code{gtk-font-name} sets the default font for GTK. You +must use Pango font names (@pxref{GTK styles}). A GTK resources file +that just sets a default font looks like this: + +@smallexample +gtk-font-name = "courier 12" +@end smallexample + + The GTK resources file is fully described in the GTK API document. +This can be found in +@file{@var{prefix}/share/gtk-doc/html/gtk/gtk-resource-files.html}, +where @file{prefix} is the directory in which the GTK libraries were +installed (usually @file{/usr} or @file{/usr/local}). You can also +find the document online, at +@uref{http://developer.gnome.org/doc/API/2.0/gtk/gtk-Resource-Files.html}. + +@menu +* GTK widget names:: How widgets in GTK are named in general. +* GTK Names in Emacs:: GTK widget names in Emacs. +* GTK styles:: What can be customized in a GTK widget. +@end menu + +@node GTK widget names +@appendixsubsec GTK widget names +@cindex GTK widget names + + A GTK widget is specified by its @dfn{widget class} and +@dfn{widget name}. The widget class is the type of the widget: for +example, @code{GtkMenuBar}. The widget name is the name given to a +specific widget. A widget always has a class, but need not have a +name. + + @dfn{Absolute names} are sequences of widget names or widget +classes, corresponding to hierarchies of widgets embedded within +other widgets. For example, if a @code{GtkWindow} named @code{top} +contains a @code{GtkVBox} named @code{box}, which in turn contains +a @code{GtkMenuBar} called @code{menubar}, the absolute class name +of the menu-bar widget is @code{GtkWindow.GtkVBox.GtkMenuBar}, and +its absolute widget name is @code{top.box.menubar}. + + When assigning a style to a widget, you can use the absolute class +name or the absolute widget name. + + There are two commands to specify changes for widgets: + +@table @asis +@item @code{widget_class} +specifies a style for widgets based on the absolute class name. + +@item @code{widget} +specifies a style for widgets based on the absolute class name, +or just the class. +@end table + +@noindent +You must specify the class and the style in double-quotes, and put +these commands at the top level in the GTK customization file, like +this: + +@smallexample +style "menufont" +@{ + font_name = "helvetica bold 14" +@} + +widget "top.box.menubar" style "menufont" +widget_class "GtkWindow.GtkVBox.GtkMenuBar" style "menufont" +@end smallexample + + Matching of absolute names uses shell wildcard syntax: @samp{*} +matches zero or more characters and @samp{?} matches one character. +This example assigns @code{base_style} to all widgets: + +@smallexample +widget "*" style "base_style" +@end smallexample + + Given the absolute class name @code{GtkWindow.GtkVBox.GtkMenuBar} +and the corresponding absolute widget name @code{top.box.menubar}, all +these examples specify @code{my_style} for the menu bar: + +@smallexample +widget_class "GtkWindow.GtkVBox.GtkMenuBar" style "my_style" +widget_class "GtkWindow.*.GtkMenuBar" style "my_style" +widget_class "*GtkMenuBar" style "my_style" +widget "top.box.menubar" style "my_style" +widget "*box*menubar" style "my_style" +widget "*menubar" style "my_style" +widget "*menu*" style "my_style" +@end smallexample + +@node GTK Names in Emacs +@appendixsubsec GTK Widget Names in Emacs +@cindex GTK widget names +@cindex GTK widget classes + + In Emacs, the top level widget for a frame is a @code{GtkWindow} +that contains a @code{GtkVBox}. The @code{GtkVBox} contains the +@code{GtkMenuBar} and a @code{GtkFixed} widget. The vertical scroll +bars, @code{GtkVScrollbar}, are contained in the @code{GtkFixed} +widget. The text you write in Emacs is drawn in the @code{GtkFixed} +widget. + + Dialogs in Emacs are @code{GtkDialog} widgets. The file dialog is a +@code{GtkFileSelection} widget. + +@noindent +To set a style for the menu bar using the absolute class name, use: + +@smallexample +widget_class "GtkWindow.GtkVBox.GtkMenuBar" style "my_style" +@end smallexample + +@noindent +For the scroll bar, the absolute class name is: + +@smallexample +widget_class + "GtkWindow.GtkVBox.GtkFixed.GtkVScrollbar" + style "my_style" +@end smallexample + +@noindent +The names for the emacs widgets, and their classes, are: + +@multitable {@code{verticalScrollbar plus}} {@code{GtkFileSelection} and some} +@item @code{emacs-filedialog} +@tab @code{GtkFileSelection} +@item @code{emacs-dialog} +@tab @code{GtkDialog} +@item @code{Emacs} +@tab @code{GtkWindow} +@item @code{pane} +@tab @code{GtkVHbox} +@item @code{emacs} +@tab @code{GtkFixed} +@item @code{verticalScrollBar} +@tab @code{GtkVScrollbar} +@item @code{emacs-toolbar} +@tab @code{GtkToolbar} +@item @code{menubar} +@tab @code{GtkMenuBar} +@item @code{emacs-menuitem} +@tab anything in menus +@end multitable + +@noindent +Thus, for Emacs you can write the two examples above as: + +@smallexample +widget "Emacs.pane.menubar" style "my_style" +widget "Emacs.pane.emacs.verticalScrollBar" style "my_style" +@end smallexample + + GTK absolute names are quite strange when it comes to menus +and dialogs. The names do not start with @samp{Emacs}, as they are +free-standing windows and not contained (in the GTK sense) by the +Emacs GtkWindow. To customize the dialogs and menus, use wildcards like this: + +@smallexample +widget "*emacs-dialog*" style "my_dialog_style" +widget "*emacs-filedialog* style "my_file_style" +widget "*emacs-menuitem* style "my_menu_style" +@end smallexample + + If you specify a customization in @file{~/.emacs.d/gtkrc}, then it +automatically applies only to Emacs, since other programs don't read +that file. For example, the drop down menu in the file dialog can not +be customized by any absolute widget name, only by an absolute class +name. This is because the widgets in the drop down menu do not +have names and the menu is not contained in the Emacs GtkWindow. To +have all menus in Emacs look the same, use this in +@file{~/.emacs.d/gtkrc}: + +@smallexample +widget_class "*Menu*" style "my_menu_style" +@end smallexample + +@node GTK styles +@appendixsubsec GTK styles +@cindex GTK styles + + In a GTK style you specify the appearance widgets shall have. You +can specify foreground and background color, background pixmap and +font. The edit widget (where you edit the text) in Emacs is a GTK +widget, but trying to specify a style for the edit widget will have no +effect. This is so that Emacs compiled for GTK is compatible with +Emacs compiled for other X toolkits. The settings for foreground, +background and font for the edit widget is taken from the X resources; +@pxref{Resources}. Here is an example of two style declarations, +@samp{default} and @samp{ruler}: + +@smallexample +pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps" + +style "default" +@{ + font_name = "helvetica 12" + + bg[NORMAL] = @{ 0.83, 0.80, 0.73 @} + bg[SELECTED] = @{ 0.0, 0.55, 0.55 @} + bg[INSENSITIVE] = @{ 0.77, 0.77, 0.66 @} + bg[ACTIVE] = @{ 0.0, 0.55, 0.55 @} + bg[PRELIGHT] = @{ 0.0, 0.55, 0.55 @} + + fg[NORMAL] = "black" + fg[SELECTED] = @{ 0.9, 0.9, 0.9 @} + fg[ACTIVE] = "black" + fg[PRELIGHT] = @{ 0.9, 0.9, 0.9 @} + + base[INSENSITIVE] = "#777766" + text[INSENSITIVE] = @{ 0.60, 0.65, 0.57 @} + + bg_pixmap[NORMAL] = "background.xpm" + bg_pixmap[INSENSITIVE] = "background.xpm" + bg_pixmap[ACTIVE] = "background.xpm" + bg_pixmap[PRELIGHT] = "<none>" + +@} + +style "ruler" = "default" +@{ + font_name = "helvetica 8" +@} + +@end smallexample + + The style @samp{ruler} inherits from @samp{default}. This way you can build +on existing styles. The syntax for fonts and colors is described below. + + As this example shows, it is possible to specify several values for +foreground and background depending on the widget's @dfn{state}. The +possible states are: + +@table @code +@item NORMAL +This is the default state for widgets. +@item ACTIVE +This is the state for a widget that is ready to do something. It is +also for the trough of a scroll bar, i.e. @code{bg[ACTIVE] = "red"} +sets the scroll bar trough to red. Buttons that have been pressed but +not released yet (``armed'') are in this state. +@item PRELIGHT +This is the state for a widget that can be manipulated, when the mouse +pointer is over it---for example when the mouse is over the thumb in +the scroll bar or over a menu item. When the mouse is over a button +that is not pressed, the button is in this state. +@item SELECTED +This is the state for data that has been selected by the user. It can +be selected text or items selected in a list. This state is not used +in Emacs. +@item INSENSITIVE +This is the state for widgets that are visible, but they can not be +manipulated in the usual way---for example, buttons that can't be +pressed, and disabled menu items. To display disabled menu items in +yellow, use @code{fg[INSENSITIVE] = "yellow"}. +@end table + + Here are the things that can go in a style declaration: + +@table @code +@item bg[@var{state}] = @var{color} +This specifies the background color for the widget. Note that +editable text doesn't use @code{bg}; it uses @code{base} instead. + +@item base[@var{state}] = @var{color} +This specifies the background color for editable text. In Emacs, this +color is used for the background of the text fields in the file +dialog. + +@item bg_pixmap[@var{state}] = "@var{pixmap}" +This specifies an image background (instead of a background color). +@var{pixmap} should be the image file name. GTK can use a number of +image file formats, including XPM, XBM, GIF, JPEG and PNG. If you +want a widget to use the same image as its parent, use +@samp{<parent>}. If you don't want any image, use @samp{<none>}. +@samp{<none>} is the way to cancel a background image inherited from a +parent style. + +You can't specify the file by its absolute file name. GTK looks for +the pixmap file in directories specified in @code{pixmap_path}. +@code{pixmap_path} is a colon-separated list of directories within +double quotes, specified at the top level in a @file{gtkrc} file +(i.e. not inside a style definition; see example above): + +@smallexample +pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps" +@end smallexample + +@item fg[@var{state}] = @var{color} +This specifies the foreground color for widgets to use. It is the +color of text in menus and buttons, and the color for the arrows in +the scroll bar. For editable text, use @code{text}. + +@item text[@var{state}] = @var{color} +This is the color for editable text. In Emacs, this color is used for the +text fields in the file dialog. + +@item font_name = "@var{font}" +This specifies the font for text in the widget. @var{font} is a +Pango font name, for example @samp{Sans Italic 10}, @samp{Helvetica +Bold 12}, @samp{Courier 14}, @samp{Times 18}. See below for exact +syntax. The names are case insensitive. +@end table + + There are three ways to specify a color: by name, in hexadecimal +form, and with an RGB triplet. + +@noindent +A color name is written within double quotes, for example @code{"red"}. + +@noindent +Hexadecimal form is the same as in X: +@code{#@var{rrrr}@var{gggg}@var{bbbb}}, where all three color specs +must have the same number of hex digits (1, 2, 3 or 4). + +@noindent +An RGB triplet looks like @code{@{ @var{r}, @var{g}, @var{b} @}}, +where @var{r}, @var{g} and @var{b} are either integers in the range +0-65535 or floats in the range 0.0-1.0. + + Pango font names have the form ``@var{family-list} @var{style-options} +@var{size}.'' +@cindex Pango font name +@noindent +@var{family-list} is a comma separated list of font families optionally +terminated by a comma. This way you can specify several families and the +first one found will be used. @var{family} corresponds to the second part in +an X font name, for example in + +@smallexample +-adobe-times-medium-r-normal--12-120-75-75-p-64-iso10646-1 +@end smallexample + +@noindent +the family name is @samp{times}. + +@noindent +@var{style-options} is a whitespace separated list of words where each word +is a style, variant, weight, or stretch. The default value for all of +these is @code{normal}. + +@noindent +A `style' corresponds to the fourth part of an X font name. In X font +names it is the character @samp{r}, @samp{i} or @samp{o}; in Pango +font names the corresponding values are @code{normal}, @code{italic}, +or @code{oblique}. + +@noindent +A `variant' is either @code{normal} or @code{small-caps}. +Small caps is a font with the lower case characters replaced by +smaller variants of the capital characters. + +@noindent +Weight describes the ``boldness'' of a font. It corresponds to the third +part of an X font name. It is one of @code{ultra-light}, @code{light}, +@code{normal}, @code{bold}, @code{ultra-bold}, or @code{heavy}. + +@noindent +Stretch gives the width of the font relative to other designs within a +family. It corresponds to the fifth part of an X font name. It is one of +@code{ultra-condensed}, @code{extra-condensed}, @code{condensed}, +@code{semi-condensed}, @code{normal}, @code{semi-expanded}, +@code{expanded}, @code{extra-expanded}, or @code{ultra-expanded}. + +@noindent +@var{size} is a decimal number that describes the font size in points. +@end ifnottex + +@ignore + arch-tag: 9b6ff773-48b6-41f6-b2f9-f114b8bdd97f +@end ignore |