home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-06-08 | 48.0 KB | 1,185 lines |
- Info file elisp, produced by Makeinfo, -*- Text -*- from input file
- elisp.texi.
-
- This file documents GNU Emacs Lisp.
-
- This is edition 1.03 of the GNU Emacs Lisp Reference Manual, for
- Emacs Version 18.
-
- Published by the Free Software Foundation, 675 Massachusetts
- Avenue, Cambridge, MA 02139 USA
-
- Copyright (C) 1990 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of
- this manual provided the copyright notice and this permission notice
- are preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
- this manual under the conditions for verbatim copying, provided that
- the entire resulting derived work is distributed under the terms of a
- permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
- manual into another language, under the above conditions for modified
- versions, except that this permission notice may be stated in a
- translation approved by the Foundation.
-
-
- File: elisp, Node: Minor Modes, Next: Mode Line Format, Prev: Major Modes, Up: Modes
-
- Minor Modes
- ===========
-
- A "minor mode" provides features that users may enable or disable
- independently of the choice of major mode. Minor modes can be
- enabled individually or in combination. Minor modes would be better
- named "Generally available, optional feature modes" except that such
- a name is unwieldy.
-
- A minor mode is not usually a modification of single major mode.
- For example, `auto-fill-mode' and `auto-justify-mode' may be used in
- any major mode that permits text insertion. To be general, a minor
- mode must be effectively independent of the things major modes do.
-
- A minor mode is often much more difficult to implement than a
- major mode. One reason is that you should be able to deactivate a
- minor mode and restore the environment of the major mode to the state
- it was in before the minor mode was activated.
-
- Often the biggest problem in implementing a minor mode is finding
- a way to insert the necessary hook into the rest of Emacs. For
- example, some minor modes, such as Auto Fill mode, change how text is
- inserted into a buffer. Without `auto-fill-hook', Auto Fill mode
- would be implementable only at great pain and great cost in editing
- efficiency.
-
- * Menu:
-
- * Minor Mode Conventions:: Tips for writing a minor mode.
- * Limits of Minor Modes:: Minor modes are of limited generality.
-
-
- File: elisp, Node: Minor Mode Conventions, Next: Limits of Minor Modes, Prev: Minor Modes, Up: Minor Modes
-
- Conventions for Writing Minor Modes
- -----------------------------------
-
- There are conventions for writing minor modes just as there are
- for major modes. Several of the major mode conventions apply to
- minor modes as well: those regarding the name of the mode
- initialization function, the names of global symbols, and the use of
- keymaps and other tables.
-
- In addition, there are several conventions that are specific to
- minor modes.
-
- * The minor mode should be represented by a symbol whose name ends
- in `-mode'. This symbol should be both a command to turn the
- mode on or off and a variable which records whether the mode is
- on.
-
- This variable is used in conjunction with the `minor-mode-alist'
- to display the minor mode name in the mode line. It may also be
- directly responsible for controlling the features of the minor
- mode.
-
- If you want the minor mode to be enabled separately in each
- buffer, make the variable buffer-local.
-
- * A minor mode command should accept one optional argument. If
- the argument is `nil', the function should toggle the mode (turn
- it on if it is off, and off if it is on). Otherwise, the
- function should turn the mode on if the argument is a positive
- integer, a symbol, or a list whose CAR is a positive integer; it
- should turn the mode off otherwise. (This convention has not
- been implemented with full consistency in Emacs version 18.)
-
- Here is an example taken from the definition of `overwrite-mode':
-
- (setq overwrite-mode
- (if (null arg) (not overwrite-mode)
- (> (prefix-numeric-value arg) 0)))
-
- * Add an element to `minor-mode-alist' for each minor mode (*note
- Mode Line Variables::.). This element should be a list of the
- following form:
-
- (MODE-VARIABLE STRING)
-
- Here MODE-VARIABLE is the variable that indicates the enablement
- of the minor mode, and STRING is a short string, starting with a
- space, to represent the mode in the mode line. These strings
- must be short so that there is room for several of them at once.
-
- When you add an element to `minor-mode-alist', use `assq' to
- check for an existing element, to avoid duplication. For example:
-
- (or (assq 'leif-mode minor-mode-alist)
- (setq minor-mode-alist
- (cons '(leif-mode " Leif") minor-mode-alist)))
-
- * If the minor mode adds new key bindings to the local keymap, you
- should be able to restore the keymap to its original value when
- you deactivate the minor mode.
-
-
- File: elisp, Node: Limits of Minor Modes, Prev: Minor Mode Conventions, Up: Minor Modes
-
- Limitations of Minor Modes
- --------------------------
-
- It is very difficult to write a minor mode that responds to
- arbitrary self-inserting characters. The principal problem is that
- `self-insert-command', the command to insert the last key typed, is a
- primitive function written in C. It does not call any hooks, except
- in special cases.
-
- Unfortunately, you cannot simply substitute your own definition of
- `self-insert-command' for the existing one, as you can with most
- functions. This is a consequence of the way the editor command loop
- works: it checks whether a key is bound to `self-insert-command' and,
- if so, it calls the primitive `self-insert-command' function
- directly. It does not check to see whether you have written another
- version of the function to substitute for it. This is done for speed.
- (In general, if you substitute a Lisp function for a primitive, the C
- code within Emacs will continue to call the original primitive, but
- Lisp code will call your substitute Lisp function.)
-
- Instead of attempting to replace the function definition for
- `self-insert-command', you could rebind certain keys that call
- `self-insert-command'. This can be made to work as long as no two
- minor modes try to rebind the same key. In a minor mode that is
- global (affects all buffers), do the rebinding in the global map. In
- a minor mode that is local to individual buffers, you will need to
- copy the local keymap (since it is usually shared with all the other
- buffers in the same major mode) and then make the change.
-
-
- File: elisp, Node: Mode Line Format, Next: Hooks, Prev: Minor Modes, Up: Modes
-
- Mode Line Format
- ================
-
- Each Emacs window includes a mode line which displays status
- information about the buffer displayed in the window. The mode line
- contains information about the buffer such as its name, associated
- file, depth of recursive editing, and the major and minor modes of
- the buffer. This section describes how the contents of the mode line
- are controlled. It is in the chapter on modes because much of the
- information displayed in the mode line relates to the enabled major
- and minor modes.
-
- `mode-line-format' is a buffer-local variable that holds a
- template used to display the mode line of the current buffer. All
- windows for the same buffer use the same `mode-line-format' and the
- mode lines will appear the same (except perhaps for the percentage of
- the file scrolled off the top).
-
- The mode line of a window is normally updated whenever a different
- buffer is shown in the window, or when the buffer's modified-status
- changes from `nil' to `t' or vice-versa. If you modify any of the
- variables referenced by `mode-line-format', you may want to force an
- update of the mode line so as to display the new information. You
- can do this with the following expression:
-
- (set-buffer-modified-p (buffer-modified-p))
-
- The mode line is usually displayed in inverse video; see
- `mode-line-inverse-video' in *Note Screen Attributes::.
-
- * Menu:
-
- * Mode Line Data:: The data structure that controls the mode line.
- * Mode Line Variables:: Variables used in that data structure.
- * %-Constructs:: Putting information into a mode line.
-
-
- File: elisp, Node: Mode Line Data, Next: Mode Line Variables, Prev: Mode Line Format, Up: Mode Line Format
-
- The Data Structure of the Mode Line
- -----------------------------------
-
- The mode line contents are controlled by a data structure of
- lists, strings, symbols and numbers kept in the buffer-local variable
- `mode-line-format'. The data structure is called a "mode line
- construct", and it is built in recursive fashion out of simpler mode
- line constructs.
-
- * Variable: mode-line-format
- The value of this variable is a mode line construct with overall
- responsibility for the mode line format. The value of this
- variable controls which other variables are used to form the
- mode line text, and where they appear.
-
- A mode line construct may be as simple as a fixed string of text,
- but it usually specifies how to use other variables to construct the
- text. Many of these variables are themselves defined to have mode
- line constructs as their values.
-
- The default value of `mode-line-format' incorporates the values of
- variables such as `mode-name' and `minor-mode-alist'. Because of
- this, very few modes need to alter `mode-line-format'. For most
- purposes, it is sufficient to alter the variables referenced by
- `mode-line-format'.
-
- A mode line construct may be a list, cons cell, symbol, or string.
- If the value is a list, each element may be a list, a cons cell, a
- symbol, or a string.
-
- `STRING'
- A string as a mode line construct is displayed verbatim in the
- mode line except for "`%'-constructs". Decimal digits after the
- `%' specify the field width for space filling on the right
- (i.e., the data is left justified). *Note %-Constructs::.
-
- `SYMBOL'
- A symbol as a mode line construct stands for its value. The
- value of SYMBOL is used in place of SYMBOL unless SYMBOL is `t'
- or `nil', or is void, in which case SYMBOL is ignored.
-
- There is one exception: if the value of SYMBOL is a string, it
- is processed verbatim in that the `%'-constructs are not
- recognized.
-
- `(STRING REST...) or (LIST REST...)'
- A list whose first element is a string or list, means to
- concatenate all the elements. This is the most common form of
- mode line construct.
-
- `(SYMBOL THEN ELSE)'
- A list whose first element is a symbol is a conditional. Its
- meaning depends on the value of SYMBOL. If the value is
- non-`nil', the second element of the list (THEN) is processed
- recursively as a mode line element. But if the value of SYMBOL
- is `nil', the third element of the list (if there is one) is
- processed recursively.
-
- `(WIDTH REST...)'
- A list whose first element is an integer specifies truncation or
- padding of the results of REST. The remaining elements REST are
- processed recursively as mode line constructs and concatenated
- together. Then the result is space filled (if WIDTH is
- positive) or truncated (to -WIDTH columns, if WIDTH is negative)
- on the right.
-
- For example, the usual way to show what percentage of a buffer
- is above the top of the window is to use a list like this: `(-3
- . "%p")'.
-
- If you do alter `mode-line-format' itself, the new value should
- use all the same variables that are used by the default value, rather
- than duplicating their contents or displaying the information in
- another fashion. This permits customizations made by the user, by
- libraries (such as `display-time') or by major modes via changes to
- those variables remain effective.
-
- Here is an example of a `mode-line-format' that might be useful
- for `shell-mode' since it contains the hostname and default directory.
-
- (setq mode-line-format
- (list ""
- 'mode-line-modified
- "%b--"
- (getenv "HOST") ; One element is not constant.
- ":"
- 'default-directory
- " "
- 'global-mode-string
- " %[(" 'mode-name
- 'minor-mode-alist
- "%n"
- 'mode-line-process
- ")%]----"
- '(-3 . "%p")
- "-%-"))
-
-
- File: elisp, Node: Mode Line Variables, Next: %-Constructs, Prev: Mode Line Data, Up: Mode Line Format
-
- Variables Used in the Mode Line
- -------------------------------
-
- This section describes variables incorporated by the standard
- value of `mode-line-format' into the text of the mode line. There is
- nothing inherently special about these variables; any other variables
- could have the same effects on the mode line if `mode-line-format'
- were changed to use them.
-
- * Variable: mode-line-modified
- This variable holds the mode-line construct for displaying
- whether the current buffer is modified.
-
- The default value `mode-line-modified' is `("--%1*%1*-")'. This
- means that the mode line displays `--**-' if the buffer is
- modified, `----' if the buffer is not modified, and `--%%-' if
- the buffer is read only.
-
- Changing this variable does not force an update of the mode line.
-
- * Variable: mode-line-buffer-identification
- This variable identifies the buffer being displayed in the window.
- Its default value is `Emacs: %17b', which means that it displays
- `Emacs:' followed by the buffer name. You may want to change
- this in modes such as Rmail that do not behave like a "normal"
- Emacs.
-
- * Variable: global-mode-string
- This variable holds a string that is displayed in the mode line
- for the use of `display-time'. The `%M' construct substitutes
- the value of `global-mode-string', but this is obsolete, since
- the variable is included directly in the mode line.
-
- * Variable: mode-name
- This buffer-local variable holds the "pretty" name of the
- current buffer's major mode. Each major mode should set this
- variable so that the mode name will appear in the mode line.
-
- * Variable: minor-mode-alist
- This variable holds an association list whose elements specify
- how the mode line should indicate that a minor mode is active.
- Each element of the `minor-mode-alist' should be a two-element
- list:
-
- (MINOR-MODE-VARIABLE MODE-LINE-STRING)
-
- The string MODE-LINE-STRING is included in the mode line when
- the value of MINOR-MODE-VARIABLE is non-`nil' and not otherwise.
- These strings should begin with spaces so that they don't run
- together. Conventionally, the MINOR-MODE-VARIABLE for a
- specific mode is set to a non-`nil' value when that minor mode
- is activated.
-
- The default value of `minor-mode-alist' is:
-
- minor-mode-alist
- => ((abbrev-mode " Abbrev")
- (overwrite-mode " Ovwrt")
- (auto-fill-hook " Fill")
- (defining-kbd-macro " Def"))
-
- (Note that in version 19, `auto-fill-hook' will be renamed to
- `auto-fill-function'.)
-
- `minor-mode-alist' is not buffer-local. The variables mentioned
- in the alist should be buffer-local if the minor mode can be
- enabled separately in each buffer.
-
- * Variable: mode-line-process
- This buffer-local variable contains the mode line information on
- process status in modes used for communicating with
- subprocesses. It is displayed immediately following the major
- mode name, with no intervening space. For example, its value in
- the `*shell*' buffer is `(": %s")', which allows the shell to
- display its status along with the major mode as: `(Shell: run)'.
- Normally this variable is `nil'.
-
- * Variable: default-mode-line-format
- This variable holds the default `mode-line-format' for buffers
- that do not override it. This is the same as `(default-value
- 'mode-line-format)'.
-
- The default value of `default-mode-line-format' is:
-
- (""
- mode-line-modified
- mode-line-buffer-identification
- " "
- global-mode-string
- " %[("
- mode-name
- minor-mode-alist
- "%n"
- mode-line-process
- ")%]----"
- (-3 . "%p")
- "-%-")
-
-
- File: elisp, Node: %-Constructs, Prev: Mode Line Variables, Up: Mode Line Format
-
- `%'-Constructs in the Mode Line
- -------------------------------
-
- The following table lists the recognized `%'-constructs and what
- they mean.
-
- `%b'
- the current buffer name, using the `buffer-name' function.
-
- `%f'
- the visited file name, using the `buffer-file-name' function.
-
- `%*'
- `%' if the buffer is read only (see `buffer-read-only');
- `*' if the buffer is modified (see `buffer-modified-p');
- `-' otherwise.
-
- `%s'
- the status of the subprocess belonging to the current buffer,
- using `process-status'.
-
- `%p'
- the percent of the buffer above the top of window, or `Top',
- `Bottom' or `All'.
-
- `%n'
- `Narrow' when narrowing is in effect; nothing otherwise (see
- `narrow-to-region' in *Note Narrowing::).
-
- `%['
- an indication of the depth of recursive editing levels (not
- counting minibuffer levels): one `[' for each editing level.
-
- `%]'
- one `]' for each recursive editing level (not counting
- minibuffer levels).
-
- `%%'
- the character `%'--this is how to include a literal `%' in a
- string in which `%'-constructs are allowed.
-
- `%-'
- dashes sufficient to fill the remainder of the mode line.
-
- The following two `%'-constructs are still supported but are
- obsolete since use of the `mode-name' and `global-mode-string'
- variables will produce the same results.
-
- `%m'
- the value of `mode-name'.
-
- `%M'
- the value of `global-mode-string'. Currently, only
- `display-time' modifies `global-mode-string'.
-
-
- File: elisp, Node: Hooks, Prev: Mode Line Format, Up: Modes
-
- Hooks
- =====
-
- A "hook" is a variable whose value is a "hook function" (or a list
- of hook functions) to be called by parts of Emacs on certain defined
- occasions. The purpose of hooks is to facilitate customization, and
- the value of a hook is most often set up in the `.emacs' file, but it
- may be changed by programs. The function or functions used in a hook
- may be any of the valid kinds of functions that `funcall' accepts
- (*note What Is a Function::.).
-
- Most modes run hooks as the last step of initialization. This
- makes it easy for a user to customize the behavior of the mode, by
- overriding the local variable assignments already made by the mode.
- But hooks may also be used in other contexts. For example, the
- functions named by `find-file-not-found-hooks' are called whenever a
- file is not found by `find-file'.
-
- For example, you can put the following expression in your `.emacs'
- file if you want to turn on Auto Fill mode when in Lisp Interaction
- mode:
-
- (setq lisp-interaction-mode-hook 'turn-on-auto-fill)
-
- The next example shows how to use a hook to customize the way
- Emacs formats C code. (People often have strong personal preferences
- for one format compared to another.) Here the hook function is an
- anonymous lambda expression.
-
- (setq c-mode-hook
- (function (lambda ()
- (setq c-indent-level 4
- c-argdecl-indent 0
- c-label-offset -4
- c-continued-statement-indent 0
- c-brace-offset 0
- comment-column 40))))
-
- (setq c++-mode-hook c-mode-hook)
-
- Finally, here is an example of how to use the Text mode hook to
- provide a customized mode line for buffers in Text mode, displaying
- the default directory in addition to the standard components of the
- mode line. (This may cause the mode line to run out of space if you
- have very long path names or display the time and load.)
-
- (setq text-mode-hook
- (function (lambda ()
- (setq mode-line-format
- '(mode-line-modified
- "Emacs: %14b"
- " "
- default-directory
- " "
- global-mode-string
- "%[("
- mode-name
- minor-mode-alist
- "%n"
- mode-line-process
- ") %]---"
- (-3 . "%p")
- "-%-")))))
-
- *Note Standard Hooks::, for a list of standard hook variables.
-
- Most hook variables are initially void. This has no effect on
- examples such as the previous ones, where the hook variable is set
- without reference to any previous value. However, if you want to add
- an element to a hook variable which you use as a list of functions,
- you need to make sure the variable is not void. Here is how to do it
- using `defvar':
-
- (defvar foo-hook nil)
- (or (memq 'my-hook foo-hook)
- (setq foo-hook (cons 'my-hook foo-hook)))
-
- At the appropriate time, Emacs uses the `run-hooks' function to
- run the hooks you have specified.
-
- * Function: run-hooks &rest HOOKVAR
- This function takes one or more hook names as arguments and runs
- each one in turn. Each HOOKVAR argument should be a symbol that
- is a hook variable. These arguments are processed in the order
- specified.
-
- If a hook variable has a non-`nil' value, that value may be a
- function or a list of functions. If the value is a function
- (either a lambda expression or a symbol with a function
- definition), it is called. If it is a list, the elements are
- called, in order. The hook functions are called with no
- arguments.
-
- For example:
-
- (run-hooks 'emacs-lisp-mode-hook)
-
- Major mode functions use this function to call any hooks defined
- by the user.
-
-
- File: elisp, Node: Documentation, Next: Files, Prev: Modes, Up: Top
-
- Documentation
- *************
-
- GNU Emacs Lisp has convenient on-line help facilities, most of
- which derive their information from the documentation strings
- associated with functions and variables. This chapter describes how
- to write good documentation strings for your Lisp programs, as well
- as how to write programs to access documentation.
-
- Note that the documentation strings for Emacs are not the same
- thing as the Emacs manual. Manuals have their own source files,
- written in the Texinfo language; documentation strings are specified
- in the definitions of the functions and variables they apply to. A
- collection of documentation strings is not sufficient as a manual
- because a good manual is not organized in that fashion; it is
- organized in terms of topics of discussion.
-
- * Menu:
-
- * Documentation Basics:: Good style for doc strings.
- Where to put them. How Emacs stores them.
- * Accessing Documentation:: How Lisp programs can access doc strings.
- * Keys in Documentation:: Substituting current key bindings.
- * Describing Characters:: Making printable descriptions of
- non-printing characters and key sequences.
- * Help Functions:: Subroutines used by Emacs help facilities.
-
-
- File: elisp, Node: Documentation Basics, Next: Accessing Documentation, Prev: Documentation, Up: Documentation
-
- Documentation Basics
- ====================
-
- A documentation string is written using the Lisp syntax for
- strings, with double-quote characters surrounding the text of the
- string. This is because it really is a Lisp string object. The
- string serves as documentation when it is written in the proper place
- in the definition of a function or variable. In a function
- definition, the documentation string follows the argument list. In a
- variable definition, the documentation string follows the initial
- value of the variable.
-
- When you write a documentation string, make the first line a
- complete sentence (or two complete sentences) since some commands,
- such as `apropos', print only the first line of a multi-line
- documentation string. Also, you should not indent the second line of
- a documentation string, if you have one, because that looks odd when
- you use `C-h f' (`describe-function') or `C-h v' (`describe-variable').
-
- Documentation strings may contain several special substrings,
- which stand for key bindings to be looked up in the current keymaps
- when the documentation is displayed. This allows documentation
- strings to refer to the keys for related commands and be accurate
- even when a user rearranges the key bindings. (*Note Accessing
- Documentation::.)
-
- Within the Lisp world, a documentation string is kept with the
- function or variable that it describes:
-
- * The documentation for a function is stored in the function
- definition itself (*note Lambda Expressions::.). The function
- `documentation' knows how to extract it.
-
- * The documentation for a variable is stored on the variable's
- property list under the property name `variable-documentation'.
- The function `documentation-property' knows how to extract it.
-
- However, to save space, the documentation for preloaded functions
- and variables (including primitive functions and autoloaded
- functions) are stored in the `emacs/etc/DOC-VERSION' file. Both the
- `documentation' and the `documentation-property' functions know how
- to access `emacs/etc/DOC-VERSION', and the process is transparent to
- the user. In this case, the documentation string is replaced with an
- integer offset into the `emacs/etc/DOC-VERSION' file. Keeping the
- documentation strings out of the Emacs core image saves a significant
- amount of space. *Note Building Emacs::.
-
- For information on the uses of documentation strings, see
- `where-is-internal' and `describe-bindings' in *Note Global and Local
- Keymaps::. Also, see *Note : (emacs)Help.
-
- The `emacs/etc' directory contains two utilities for printing the
- `emacs/etc/DOC-VERSION' file in hardcopy. These are `sorted-doc.c'
- and `digest-doc.c'.
-
-
- File: elisp, Node: Accessing Documentation, Next: Keys in Documentation, Prev: Documentation Basics, Up: Documentation
-
- Access to Documentation Strings
- ===============================
-
- * Function: documentation-property SYMBOL PROPERTY
- This function returns the documentation string that is recorded
- SYMBOL's property list under property PROPERTY. This uses the
- function `get', but does more than that: it also retrieves the
- string from the file `emacs/etc/DOC-VERSION' if necessary, and
- runs `substitute-command-keys' to substitute the actual
- (current) key bindings.
-
- (documentation-property 'command-line-processed
- 'variable-documentation)
- => "t once command line has been processed"
- (symbol-plist 'command-line-processed)
- => (variable-documentation 188902)
-
- * Function: documentation FUNCTION
- This function returns the documentation string of FUNCTION. If
- the documentation string is stored in the
- `emacs/etc/DOC-VERSION' file, this function will access it there.
-
- In addition, `documentation' runs `substitute-command-keys' on
- the resulting string, so the value contains the actual (current)
- key bindings.
-
- The function `documentation' signals a `void-function' error
- unless FUNCTION has a function definition. However, FUNCTION
- does not need to have a documentation string. If there is no
- documentation string, `documentation' returns `nil'.
-
- Here is an example of using `documentation' and
- `documentation-property' to display the documentation strings
- for several symbols in a `*Help*' buffer.
-
- (defun describe-symbols (pattern)
- "Describe the Emacs Lisp symbols matching PATTERN.
- All symbols that have PATTERN in their name are described
- in the *Help* buffer."
- (interactive "sDescribe symbols matching: ")
- (let ((describe-func
- (function
- (lambda (s)
- ;; Print description of symbol.
- (if (fboundp s) ; It is a function.
- (princ
- (format "%s\t%s\n%s\n\n" s
- (if (commandp s)
- (concat "Command: "
- (or (mapconcat
- 'key-description
- (where-is-internal s)
- " ")))
- "Function")
- (or (documentation s)
- "not documented"))))
-
- (if (boundp s) ; It is a variable.
- (princ
- (format "%s\t%s\n%s\n\n" s
- (if (user-variable-p s)
- "Option " "Variable")
- (or (documentation-property
- s 'variable-documentation)
- "not documented")))))))
- sym-list)
-
- ;; Build a list of symbols that match pattern.
- (mapatoms (function
- (lambda (sym)
- (if (string-match pattern (symbol-name sym))
- (setq sym-list (cons sym sym-list))))))
-
- ;; Display the data.
- (with-output-to-temp-buffer "*Help*"
- (mapcar describe-func (sort sym-list 'string<))
- (print-help-return-message))))
-
- The `describe-symbols' function works like `apropos', but
- provides more information.
-
- (describe-symbols "goal")
-
- ---------- Buffer: *Help* ----------
- goal-column Option
- *Semipermanent goal column for vertical motion,
- as set by C-x C-n, or nil.
-
- set-goal-column Command: C-x C-n
- Set the current horizontal position as a goal for C-n and C-p.
- Those commands will move to this position in the line moved to
- rather than trying to keep the same horizontal position.
- With a non-nil argument, clears out the goal column
- so that C-n and C-p resume vertical motion.
-
- temporary-goal-column Variable
- Current goal column for vertical motion.
- It is the column where point was at the start of current run
- of vertical motion commands.
- ---------- Buffer: *Help* ----------
-
- * Function: Snarf-documentation FILENAME
- This function is used only during Emacs initialization, just
- before the runnable Emacs is dumped. It finds the file offsets
- of the documentation strings stored in the file FILENAME, and
- records them in the in-core function definitions and variable
- property lists in place of the actual strings. *Note Building
- Emacs::.
-
- The file FILENAME is found in the `emacs/etc' directory (usually
- FILENAME is `"DOC-VERSION"'). When the dumped Emacs is later
- executed, the same file is found in the `exec-directory' (*note
- Subprocess Creation::.).
-
-
- File: elisp, Node: Keys in Documentation, Next: Describing Characters, Prev: Accessing Documentation, Up: Documentation
-
- Substituting Key Bindings in Documentation
- ==========================================
-
- * Function: substitute-command-keys STRING
- This function returns STRING with certain special substrings
- replaced by the actual (current) key bindings are listed. This
- permits the documentation to be displayed with accurate
- information about key bindings. (The key bindings may be
- changed by the user between the time Emacs is built and the time
- that the documentation is asked for.)
-
- This table lists the forms of the special substrings and what
- they are replaced with:
-
- `\[COMMAND]'
- is replaced either by a keystroke sequence that will invoke
- COMMAND, or by `M-x COMMAND' if COMMAND is not bound to any
- key sequence.
-
- `\{MAPVAR}'
- is replaced by a summary (made by `describe-bindings') of
- the value of MAPVAR, taken as a keymap.
-
- `\<MAPVAR>'
- makes this call to `substitute-command-keys' use the value
- of MAPVAR as the keymap for future `\[COMMAND]' substrings.
- This special string does not produce any replacement text
- itself; it only affects the replacements done later.
-
- *Note:* each `\' must be doubled when written in a string in
- Emacs Lisp.
-
- Here are examples of the special substrings:
-
- (substitute-command-keys
- "To abort recursive edit, type: \\[abort-recursive-edit]")
-
- => "To abort recursive edit, type: C-]"
-
- (substitute-command-keys
- "The keys that are defined for the minibuffer here are:
- \\{minibuffer-local-must-match-map}")
-
- => "The keys that are defined for the minibuffer here are:
-
- ? minibuffer-completion-help
- SPC minibuffer-complete-word
- TAB minibuffer-complete
- LFD minibuffer-complete-and-exit
- RET minibuffer-complete-and-exit
- C-g abort-recursive-edit
- "
-
- (substitute-command-keys
- "To abort a recursive edit from the minibuffer, type\
- \\<minibuffer-local-must-match-map>\\[abort-recursive-edit].")
- => "To abort a recursive edit from the minibuffer, type C-g."
-
-
- File: elisp, Node: Describing Characters, Next: Help Functions, Prev: Keys in Documentation, Up: Documentation
-
- Describing Characters for Help Messages
- =======================================
-
- These functions convert characters or strings to textual
- descriptions. These descriptions are useful for including arbitrary
- text characters or key sequences in messages, because they convert
- non-printing characters to sequences of printing characters. The
- description of a printing character is the character itself.
-
- * Function: key-description STRING
- This function returns a string containing the Emacs standard
- notation for the keyboard characters in STRING. See the
- examples for `single-key-description'.
-
- * Function: single-key-description CHARACTER
- This function returns a string describing CHARACTER in the
- standard Emacs notation for keyboard input. A normal printing
- character is represented by itself, but a control character
- turns into a string starting with `C-', a meta character turns
- into a string starting with `M-', and space, linefeed, etc. are
- transformed to `SPC', `LFD', etc.
-
- (single-key-description ?\C-x)
- => "C-x"
- (key-description "\C-x \M-y \n \t \r \f123")
- => "C-x SPC M-y SPC LFD SPC TAB SPC RET SPC C-l 1 2 3"
-
- * Function: text-char-description CHARACTER
- This function returns a string describing CHARACTER in the
- standard Emacs notation for characters that appear in text--like
- `single-key-description', except that that control characters
- are represented with a leading caret (which is how control
- characters in Emacs buffers are usually displayed).
-
- (text-char-description ?\C-c)
- => "^C"
- (text-char-description ?\M-m)
- => "M-m"
- (text-char-description ?\C-\M-m)
- => "M-^M"
-
-
- File: elisp, Node: Help Functions, Prev: Describing Characters, Up: Documentation
-
- Help Functions
- ==============
-
- Emacs provides a variety of on-line help functions, all accessible
- to the user as subcommands of the prefix `C-h'. For more information
- about them, see *Note : (emacs)Help. Here we describe some
- program-level interfaces to the same information.
-
- * Command: apropos REGEXP &optional PREDICATE NOPRINT
- This function finds all symbols whose names contain a match for
- the regular expression REGEXP, and returns a list of them.
- Normally it displays the symbols in a buffer named `*Help*',
- each with a one-line description. If NOPRINT is non-`nil', it
- does not display them, but just returns the list.
-
- If PREDICATE is non-`nil', it should be a function to be called
- on each symbol that has matched REGEXP. Only symbols for which
- PREDICATE returns a non-`nil' value are listed or displayed.
-
- When you call `apropos' interactively, it prompts for REGEXP in
- the minibuffer.
-
- In the first of the following examples, `apropos' finds all the
- symbols with names containing `exec'. They are returned but not
- displayed. In the second example, it finds and returns only
- those symbols that are also commands; in addition, they are then
- displayed in the `*Help*' buffer.
-
- (apropos "exec" nil t)
- => (Buffer-menu-execute command-execute exec-directory
- exec-path execute-extended-command execute-kbd-macro
- executing-kbd-macro executing-macro)
-
- (apropos "exec" 'commandp)
- => (Buffer-menu-execute execute-extended-command)
-
- ---------- Buffer: *Help* ----------
- Buffer-menu-execute
- Function: Save and/or delete buffers marked with
- M-x Buffer-menu-save or M-x Buffer-menu-delete commands.
- execute-extended-command ESC x
- Function: Read function name, then read its arguments and call it.
- ---------- Buffer: *Help* ----------
-
- The command `C-h a' (`command-apropos') calls `apropos', but
- specifies a PREDICATE to restrict the output to symbols that are
- commands. The call to `apropos' looks like this:
-
- (apropos string 'commandp)
-
- * Command: help-command
- This command is not a function, but rather a symbol which is
- equivalent to the keymap called `help-map'. It is defined in
- `help.el' as follows:
-
- (define-key global-map "\C-h" 'help-command)
- (fset 'help-command help-map)
-
- * Variable: help-map
- The value of this variable is a local keymap for characters
- following the Help key, `C-h'.
-
- * Function: print-help-return-message &optional FUNCTION
- This function builds a string which is a message explaining how
- to restore the previous state of the windows after a help
- command. After building the message, it applies FUNCTION to it
- if FUNCTION is non-`nil'. Otherwise it calls `message' to
- display it in the echo area.
-
- This function expects to be called inside a
- `with-output-to-temp-buffer' special form, and expects
- `standard-output' to have the value bound by that special form.
- For an example of its use, see the example in the section
- describing the `documentation' function (*note Accessing
- Documentation::.).
-
- The constructed message will have one of the forms shown below.
-
- ---------- Echo Area ----------
- Type C-x 1 to remove help window.
- ---------- Echo Area ----------
-
- ---------- Echo Area ----------
- Type C-x 4 b RET to restore old contents of help window.
- ---------- Echo Area ----------
-
- * Variable: help-char
- The value of this variable is the character that Emacs
- recognizes as meaning Help. When Emacs reads this character
- (which is usually 8, the value of `C-h'), Emacs evaluates `(eval
- help-form)', and displays the result if it is a string. If
- `help-form''s value is `nil', this character is read normally.
-
- * Variable: help-form
- The value of this variable is a form to execute when the
- character `help-char' is read. If the form returns a string,
- that string is displayed. If `help-form' is `nil', then the
- help character is not recognized.
-
- Entry to the minibuffer binds this variable to the value of
- `minibuffer-help-form'.
-
- The following two functions are found in the library `helper'.
- They are for modes that want to provide help without relinquishing
- control, such as the "electric" modes. You must load that library
- with `(require 'helper)' in order to use them. Their names begin
- with `Helper' to distinguish them from the ordinary help functions.
-
- * Command: Helper-describe-bindings
- This command pops up a window displaying a help buffer
- containing a listing of all of the key bindings from both the
- local and global keymaps. It works by calling
- `describe-bindings'.
-
- * Command: Helper-help
- This command provides help for the current mode. It prompts the
- user in the minibuffer with the message `Help (Type ? for
- further options)', and then provides assistance in finding out
- what the key bindings are, and what the mode is intended for.
- It returns `nil'.
-
- This can be customized by changing the map `Helper-help-map'.
-
-
- File: elisp, Node: Files, Next: Backups and Auto-Saving, Prev: Documentation, Up: Top
-
- Files
- *****
-
- In Emacs, you can find, create, view, save, and otherwise work
- with files and file directories. This chapter describes most of the
- file-related functions of Emacs Lisp, but a few others are described
- in *Note Buffers::, and those related to backups and auto-saving are
- described in *Note Backups and Auto-Saving::.
-
- * Menu:
-
- * Visiting Files:: Reading files into Emacs buffers for editing.
- * Saving Buffers:: Writing changed buffers back into files.
- * Reading from Files:: Reading files into other buffers.
- * Writing to Files:: Writing new files from parts of buffers.
- * File Locks:: Locking and unlocking files, to prevent
- simultaneous editing by two people.
- * Information about Files:: Testing existence, accessibility, size of files.
- * Contents of Directories:: Getting a list of the files in a directory.
- * Changing File Attributes:: Renaming files, changing protection, etc.
- * File Names:: Decomposing and expanding file names.
-
-
- File: elisp, Node: Visiting Files, Next: Saving Buffers, Prev: Files, Up: Files
-
- Visiting Files
- ==============
-
- Visiting a file means reading a file into a buffer. Once this is
- done, we say that the buffer is "visiting" that file, and call the
- file "the visited file" of the buffer.
-
- A file and a buffer are two different things. A file is
- information recorded permanently in the computer (unless you delete
- it). A buffer, on the other hand, is information inside of Emacs
- that will vanish at the end of the editing session (or when you kill
- the buffer). Usually, a buffer contains information that you have
- copied from a file; then we say the buffer is visiting that file.
- The copy in the buffer is what you modify with editing commands.
- Such changes to the buffer do not change the file; therefore, to make
- the changes permanent, you must "save" the buffer, which means
- copying the altered buffer contents back into the file.
-
- In spite of the distinction between files and buffers, people
- often refer to a file when they mean a buffer and vice-versa.
- Indeed, we say, "I am editing a file," rather than, "I am editing a
- buffer which I will soon save as a file of the same name." Humans do
- not usually need to make the distinction explicit. When dealing with
- a computer program, however, it is good to keep the distinction in
- mind.
-
- * Menu:
-
- * Visiting Functions:: The usual interface functions for visiting.
- * Subroutines of Visiting:: Lower-level subroutines that they use.
-
-
- File: elisp, Node: Visiting Functions, Next: Subroutines of Visiting, Prev: Visiting Files, Up: Visiting Files
-
- Functions for Visiting Files
- ----------------------------
-
- This section describes the functions normally used to visit files.
- For historical reasons, these functions have names starting with
- `find-' rather than `visit-'. *Note Buffer File Name::, for
- functions and variables that access the visited file name of a buffer
- or that find an existing buffer by its visited file name.
-
- * Command: find-file FILENAME
- This function reads the file FILENAME into a buffer and displays
- that buffer in the selected window so that the user can edit it.
-
- The body of the `find-file' function is very simple and looks
- like this:
-
- (switch-to-buffer (find-file-noselect filename))
-
- (See `switch-to-buffer' in *Note Displaying Buffers::.)
-
- When `find-file' is called interactively, it prompts for
- FILENAME in the minibuffer.
-
- * Function: find-file-noselect FILENAME
- This function is the guts of all the file-visiting functions.
- It reads a file into a buffer and returns the buffer. You may
- then make the buffer current or display it in a window if you
- wish, but this function does not do so.
-
- If no buffer is currently visiting FILENAME, then one is created
- and the file is visited. If FILENAME does not exist, the buffer
- is left empty, and `find-file-noselect' displays the message
- `New file' in the echo area.
-
- If a buffer is already visiting FILENAME, then
- `find-file-noselect' uses that buffer rather than creating a new
- one. However, it does verify that the file has not changed
- since it was last visited or saved in that buffer. If the file
- has changed, then this function asks the user whether to reread
- the changed file. If the user says `yes', any changes
- previously made in the buffer will be lost.
-
- The `find-file-noselect' function calls `after-find-file' after
- the file is read in (*note Subroutines of Visiting::.). The
- `after-find-file' function sets the buffer major mode, parses
- local variables, warns the user if there exists an auto-save
- file more recent than the file just visited, and finishes by
- running the functions in `find-file-hooks'.
-
- The `find-file-noselect' function returns the buffer that is
- visiting the file FILENAME.
-
- (find-file-noselect "/etc/fstab")
- => #<buffer fstab>
-
- * Command: find-alternate-file FILENAME
- This function reads the file FILENAME into a buffer and selects
- it, killing the buffer current at the time the command is run.
- It is useful if you have visited the wrong file by mistake, so
- that you can get rid of the buffer that you did not want to
- create, at the same time as you visit the file you intended.
-
- When this function is called interactively, it prompts for
- FILENAME.
-
- * Command: find-file-other-window FILENAME
- This function visits the file FILENAME and displays its buffer
- in a window other than the selected window. If there are two or
- more windows on the screen, then the window that is not selected
- is used. If there is only one window, it is split. The
- function returns `nil'.
-
- When this function is called interactively, it prompts for
- FILENAME.
-
- * Command: find-file-read-only FILENAME
- This function visits the file named FILENAME and selects its
- buffer, just like `find-file', but it marks the buffer as
- read-only. *Note Read Only Buffers::, for related functions and
- variables.
-
- When this function is called interactively, it prompts for
- FILENAME.
-
- * Command: view-file FILENAME
- This function views FILENAME in View mode, returning to the
- previous buffer when done. View mode is a mode that allows you
- to skim rapidly through the file but does not let you modify it.
-
- After loading the file, `view-file' calls the value of
- `view-hook' if that is non-`nil'.
-
- When this function is called interactively, it prompts for
- FILENAME.
-
- * Variable: find-file-hooks
- The value of this variable is a list of functions to be called
- after a file is visited. The file's local-variables
- specification (if any) will have been processed before the hooks
- are run. The buffer visiting the file is current when the hook
- functions are run.
-
- * Variable: find-file-not-found-hooks
- The value of this variable is a list of functions to be called
- when `find-file' or `find-file-noselect' is passed a nonexistent
- FILENAME. These functions are called as soon as the error is
- detected. `buffer-file-name' is already set up. The functions
- are called in the order given, until one of them returns
- non-`nil'.
-
-
-