\input texinfo   @c -*-texinfo-*-
@setfilename light.info
@settitle Lightning Completion Manual
@c footnotestyle separate
@c paragraphindent 2
@iftex
@tolerance 10000
@end iftex

@comment  use 'perl texi2html -menu -split_chapter light.texi' to get an
@comment  html file

@ifinfo
This is edition 0.50, December 1998, of the @cite{Lightning completion
Manual}.  Copyright @copyright{} 1996, 1997, 1998 John H. Palmieri
@end ifinfo

@titlepage
@title{Lightning Completion Manual}

@author (info by John H. Palmieri)

@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1996, 1997, 1998 John H. Palmieri

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.

@ignore
Permission is granted to process this file through TeX and print the
results, provided the printed document carries copying permission
notice identical to this one except for the removal of this paragraph
(this paragraph not being relevant to the printed manual).
@end ignore

Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided also that the
section entitled ``Copying'' is included exactly as in the original, and
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 Free Software Foundation.
@end titlepage
@page

@ifinfo
@node top, Overview, (dir), (dir)
@comment node-name, next,          previous, up
@top Lightning Completion
@end ifinfo

The Lightning Completion package was written in emacs lisp by Mark
Haiman and Nick Reingold, with modifications by John Palmieri.

This is version 0.50, December 1998, of the Lightning completion
manual.  Bug reports and suggestions for new features should go to
@samp{palmieri@@member.ams.org}.

This is a revised version of this manual; it is done.

@menu
* Overview::                    Overview of lightning completion
* Completion functions::        Functions incorporating lightning completion
* Key bindings::                Which keys do what in lightning completion mode
* Lightning completion::        Adding lightning completion to other functions
* Installation and customization::  How to install
* Miscellany::                  Miscellany
* Function Index::              Function index
* Concept Index::               Concept index

@detailmenu
 --- The Detailed Node Listing ---

Lightning completion

* Enabling automatic lightning completion::
* Settings for lightning completion::  Disabling lightning completion
                                       in certain circumstances

Installation and customization

* Customizable options::        A list of customizable options

Miscellany

* Ignoring some files::         Don't to complete on certain file names
* Buffer completion::           An application of lightning completion
* HTML mode completion::        Another example

@end detailmenu
@end menu

@comment in any given node: 
@comment use '@cindex CONCEPT' to add node to concept index
@comment use '@findex FUNCTION' for function index
@comment use '@vindex VARIABLE' for variable index
@comment use '@kindex KEY' for key index

@comment ---------------------------------------------------------

@node Overview, Completion functions, top, top
@chapter Overview

As you are probably aware, Emacs does various sorts of completion, if
you ask it to.  For instance, if you hit @kbd{C-x C-f} to find a file,
then (once you are in the minibuffer) if you hit the @key{TAB} key, Emacs
completes the file name if there is a unique completion.  Lightning
completion offers an improvement to this, an improvement in several
ways:

@itemize @bullet
@item
Once lightning completion is initiated, it remains active until a
completion is found, or until turned off.  If I have three files,
@file{alphabet}, @file{alpo}, and @file{bozo}, and I initiate completion
on file names, if I hit @kbd{a}, then @samp{alp} is inserted; hitting
@kbd{h} would then produce @samp{alphabet}, and hitting @kbd{o} would
produce @samp{alpo}.  Similarly, hitting @kbd{b} at the start, instead
of @kbd{a}, would have produced @samp{bozo}.  This sort of completion,
in which completion is always on---you don't have to keep hitting the
@key{SPC} or @key{TAB} key to complete---is called ``dynamic''
completion.
@refill

@item
Lightning completion takes effect only if Emacs is idle for a length of
time specified by the variable @code{lc-complete-idle-time-default}, the
default value of which is 0.5 seconds.  So in the above example, you can
type "alph" or "alpha" or "alphab"; then if you wait for half a second,
Emacs will automatically complete it for you.  This is a new feature of
lightning completion; if you are used to the old version, you can set
this delay to be 0.  If you are a slow typist and you don't want Emacs
completing unless you take a very deliberate pause, you can set it to
something like 2.
@refill

@item
Lightning completion can be initiated anywhere, not just in the
minibuffer.  If I'm writing email to someone, and I want to include the
path name for some file, I type the first few letters of the path, then
run the function @code{completing-insert-file-name}, and I'm in
lightning completion mode.  There are similar function calls for
completion on buffer names, lisp objects, lisp functions, lisp
variables, and the contents of the kill ring.
@refill
@end itemize

Some remarks:
@enumerate
@item
Dynamic completion, like any completion, has a nice side-effect: you can
use long (and hence descriptive) file names, variable names, function
names, whatever, because you hardly ever have to type the whole thing
in.  So I don't mind that my directory structure in my account is deep
and the directories have long names---I can find the file
@file{~/tex/work/papers/hovey-strickland/axiomatic.tex} with 6
keystrokes: one each for ``t'', ``w'', ``p'', ``h'', and ``a'', and then
@key{RET}. (One also gets in the habit of trying to arrange it so that
each of one's files in any given directory starts with a different
letter.)
@refill

@item
If you mainly use lightning completion with file names and if you edit
the same files over and over again, you will quickly learn exactly which
characters you have to type to find each file.  In this case, you might
want to set @code{lc-complete-idle-time-default} to be close to zero.
If you don't want to bother learning this, and if you are worried that
lightning completion will make you watch the screen all the time to see
what has been completed and what hasn't, then you should set
@code{lc-complete-idle-time-default} to be a larger number, so that
completions only occur after a good pause.

@item
Lightning completion is also one of the main ingredients to
Ultra-@TeX{} mode, a major mode for typing @TeX{} documents.  Most
@TeX{} commands start with a backslash, so in that mode, hitting ``\''
starts lightning completion on @TeX{} commands.
@refill

@item
This package should be compatible with GNU Emacs 19, GNU Emacs 20, and
XEmacs (''should be compatible'' means that I've at least tried it out a
bit with each one of these, without running into problems).  I mostly
use GNU Emacs 20, so I know it works there.  I expect it to work pretty
well with XEmacs, too, but I don't use GNU Emacs 19 anymore, and I don't
test this package very vigorously there.
@refill

@item
Dynamic completion is an acquired taste.  It can be rather off-putting
at the start, especially with a short
@code{lc-complete-idle-time-default}, but once you get used to it, it's
just wonderful.
@refill
@end enumerate

In the following sections, I describe what functions to call to start
lightning completion, which keys do what once completion is engaged, how
to automate things a bit (e.g., so that @code{find-file} automatically
uses lightning completion on file names), and how to install all of
this.



@comment ---------------------------------------------------------

@node Completion functions, Key bindings, Overview, top
@chapter Completion functions

@findex completing-insert-file-name
@findex completing-insert-buffer-name
@findex completing-insert-lisp-object
@findex completing-insert-lisp-function
@findex completing-insert-kill
@findex completing-insert-buffer-contents
@findex completing-insert-according-to-mode
@cindex Completion functions
@cindex Lightning completion functions
@cindex Functions for completion
@cindex C-x c is completion
@cindex C-\ completes a la mode

The file @file{light.el} defines several functions that do lightning
completion:

@itemize @bullet
@item
@code{completing-insert-file-name} completes on file names.
@item
@code{completing-insert-buffer-name} completes on buffer names.
@item
@code{completing-insert-lisp-object} completes on lisp objects. 
@item
@code{completing-insert-lisp-function} completes on lisp functions. 
@item
@code{completing-insert-lisp-variable} completes on lisp variables. 
@item
@code{completing-insert-kill} completes on the contents of the kill
ring. 
@item
@code{completing-insert-buffer-contents} completes on the contents of
the current buffer, or with a prefix argument on the contents of any
specified buffer.  @xref{Buffer completion}.
@item
@code{completing-insert-according-to-mode} makes a guess as to
what sort of completion it should do; if it can't figure it out, it
completes on lisp objects.  (This one is mainly useful in the
minibuffer.)
@refill
@end itemize

(These functions all call the function @code{completing-insert}, which
I'm too lazy to document.  The casual user won't want to call it
directly, anyway, and the more serious user can figure it out for
herself.)

For example, if I'm typing an info page for lightning completion, and I
want to insert the string @samp{completing-insert-kill}, I run
@code{completing-insert-lisp-function}, and then use lightning
completion to produce the function name, avoiding typing the
whole thing in (and also avoiding typos).  In detail: once I start 
@code{completing-insert-lisp-function}, the following happens:

@itemize @bullet
@item
I type the letters @kbd{c}, @kbd{o}, @kbd{m}, @kbd{p}, and
Emacs inserts @samp{comp}.
@item
I type @kbd{l} and pause, and Emacs inserts @samp{let} (so I have
@samp{complet} so far). 
@item
I type @kbd{i} and @kbd{n} and pause, and Emacs inserts @samp{ing-} (so
I have @samp{completing-} so far). 
@item
I type @kbd{i} and pause, and Emacs inserts @samp{insert} (so I have
@samp{completing-insert} so far). 
@item
I type @kbd{-} and pause, and Emacs inserts @samp{-} (so I have
@samp{completing-insert-} so far).
@item
I type @kbd{k} and pause, and Emacs inserts @samp{kill} (so I have
@samp{completing-insert-kill}, and completion stops).
@end itemize

There are user customizable variables (in the customization group
"lightning-completion") related to these functions.  If the variable
@code{lc-ctrl-x-c-is-completion} is non-nil, then @kbd{C-x c} is the
prefix key for these commands.  This is one of the few global key
bindings available, probably because it is too close to @kbd{C-x C-c}.
So be warned, if you use these key bindings, you may occasionally hit
@kbd{C-x C-c} instead of @kbd{C-x c}.  Anyway, enabling this options
provides the following key bindings:

@table @kbd
@item C-x c F
runs @code{completing-insert-file-name}.

@item C-x c b
runs @code{completing-insert-buffer-name}.

@item C-x c o
runs @code{completing-insert-lisp-object}.

@item C-x c f
runs @code{completing-insert-lisp-function}.

@item C-x c v
runs @code{completing-insert-lisp-variable}.

@item C-x c k
runs @code{completing-insert-kill}.

@item C-x c y
runs @code{completing-insert-buffer-contents}.

@item C-x c u
runs @code{completing-insert-according-to-mode}.

@end table

Note that if one plans on using lightning completion only occasionally,
and always from the minibuffer, one might be able to get away with only
using the function @code{completing-insert-according-to-mode}.  There is
a customizable variable @code{lc-ctrl-backslash-completes-a-la-mode}.
If it is non-nil, then @kbd{C-\} runs
@code{completing-insert-according-to-mode}.







@comment ---------------------------------------------------------

@node Key bindings, Lightning completion, Completion functions, top
@chapter Key bindings

@cindex Keys in completion
@cindex Key bindings
@cindex Light mode keys

While in lightning completion, the behavior of each key is modified.
Here is a description of what each key does; these functions are loosely
based on the behavior of standard completion in Emacs.  I have also
included examples; for all of the examples, suppose that you are
completing on file names, and you have files @file{albatross},
@file{alpo}, @file{alphabet}, and @file{alphabet-soup}.

There is a customizable variable @code{lc-complete-idle-time-default},
the default value of which is 0.5.  In lightning completion mode, after
this number of seconds of idle time, Emacs tries to complete.

@itemize @bullet
@item
@kbd{a-z, A-Z, 0-9}, etc.: After the delay, you get an error if there is
no valid completion based on that character.  If there are valid
completions, then Emacs inserts the characters in common with all the
valid completions.  If there is a unique such completion, then Emacs
inserts that completion, and completion stops.  (Example: if you have
@samp{alp} and you hit @kbd{x}, you get an error
(but you're still in lightning completion mode); if you hit @kbd{h},
then @samp{habet} is inserted, resulting in @samp{alphabet} (and you're
still in lightning completion mode).  If you then hit @kbd{-}, then
@samp{-soup} is inserted, and completion stops.)

When there are no valid completions, the value of the customizable
variable @code{lc-clean-up} is relevant.  If it is nil, then Emacs beeps
and warns you that there are no valid completions.  If it is non-nil,
then in addition, Emacs deletes the offending characters.  (Example: if
you have @samp{alp} and you hit @kbd{x}, then @samp{x} is inserted.  If
@code{lc-clean-up} is nil, then Emacs beeps.  If @code{lc-clean-up} is
non-nil, then Emacs beeps and deletes the @samp{x}.  If you have
@samp{al} and you type @kbd{phx}, if @code{lc-clean-up} is non-nil, then
the @samp{x} is deleted and @samp{abet} is inserted.)

@item
@key{SPC}: If you have a valid completion, this key ends lightning
completion, keeping the current completion; otherwise, if there is a
valid completion based on the current string together with " ", then a
space is inserted.  Otherwise, @key{SPC} acts like the @key{TAB} key.
(Example: if you have @samp{alp} and you hit @kbd{h}, resulting in
@samp{alphabet}, then hitting @key{SPC} would end completion and do
nothing else.  If you also have a file @file{al jolson}, then
typing @samp{al} followed by @key{SPC} produces @samp{al jolson}.
Typing @samp{alp} followed by @key{SPC} is just like typing @samp{alp}
and hitting @key{TAB}.)

@item
@key{RET}: This key exits lightning completion, regardless of whether
you have a valid completion, and inserts a new line or exits the
minibuffer, whichever is appropriate.  (Example: if you have @samp{alp}
and you hit @key{RET} would end completion and either insert a new line
or exit the minibuffer.)  (This is actually an example of the behavior
of ``Other control characters,'' described below.)

@item
@key{DEL}: This deletes the last thing that was typed along with
anything inserted automatically as a result.  (Example: if you had
@samp{alp} and you hit @kbd{h}, resulting in @samp{alphabet}, then
hitting @key{DEL} would delete @samp{habet}---the characters that were
just inserted.)

@item
@kbd{C-f}: Hitting this key repeatedly cycles through the possible
completions, in some order or other.  (Example: if you have @samp{a},
then hitting @kbd{C-f} once will give @samp{albatross}; hitting it again
will give @samp{alpo}, etc.)

@item
@kbd{C-b}: This works like @kbd{C-f}, but it cycles through the choices
in the reverse order.

@item
@key{TAB}: Hitting this key completes as far as possible.  If there are
several choices, then it opens up a new buffer in another window,
called @code{*Completions*}, in which all of the valid completions are
displayed.  That buffer is buried once completion ends.  (Example, if I
have @samp{alp} and I hit @key{TAB}, then a new buffer opens up,
containing @samp{alpo}, @samp{alphabet}, and @samp{alphabet-soup}.  If I
then hit @kbd{h} and then @key{TAB}, the @code{*Completions*} buffer
then displays @samp{alphabet} and @samp{alphabet-soup}.)  You can select
a completion by clicking on it with @kbd{mouse-2}.

@item
@kbd{M-v}: Hitting this key opens up a new buffer in another window,
called @code{*Completions*}, just as with the @key{TAB} key, but also
moves the point to that window.  You can then move from one completion
choice to another with the arrow keys, and you can select a completion
with @key{RET} or with @kbd{mouse-2}.

@item
@kbd{C-c}: Hitting this key exits lightning completion mode (useful if
you've had enough of this completion nonsense, and you just want to type
in the file name yourself; also useful if you want to type in the name
of a file that doesn't exist).

@item
@kbd{C-q}: This key quotes the next character (useful if you have a file
name containing a control character like @kbd{C-c} or @key{TAB}, for
instance).

@item
@kbd{C-h}: Hitting this key displays a very brief help message in the
minibuffer. 

@item
Other control characters: Hitting any other control character (or other
non-printing character) has two effects: completion stops, and that
character then has its normal effect.  So @kbd{C-g} stops completion and
beeps, @kbd{C-e} stops completion and moves you to the end of the line,
etc.
@end itemize

Many of these keys can be customized (in the customization group
@code{lightning-completion-keys}).






@comment ---------------------------------------------------------

@node Lightning completion, Installation and customization, Key bindings, top
@chapter Lightning completion

Suppose you want to find a file, and you want to use lightning
completion on file names.  One way to accomplish this is to run
@code{find-file} (by hitting @kbd{C-x C-f}, say), then once in the
minibuffer, either running @code{completing-insert-according-to-mode} or
@code{completing-insert-file-name} (by hitting @kbd{C-x c F}, say, if
you have turned on the option @code{lc-ctrl-x-c-is-completion}
(@pxref{Completion functions})).

Another way to accomplish this is to have lightning completion
potentially active whenever you enter the minibuffer, and to specify
when "potentially active" should mean "active".

@menu
* Enabling automatic lightning completion::
* Settings for lightning completion::  Disabling lightning completion
                                       in certain circumstances
@end menu

@comment ---------------------------------------------------------

@comment  node-name,  next,  previous,  up
@node Enabling automatic lightning completion, Settings for lightning completion, , Lightning completion 
@section Enabling automatic lightning completion

@cindex Enabling lightning completion
@cindex Toggling lightning completion
@cindex Contexts for lightning completion
@cindex Situations for lightning completion
@cindex Lightning completion--enabling
@cindex Lightning completion--contexts
@findex lightnify

To use lightning completion automatically in the minibuffer (in
various circumstances), you should turn on the option 
@code{toggle-lightning-completion}, either by customization or by
setting the variable @code{toggle-lightning-completion} to t.
Once you've done this, then the variable
@code{lightning-completion-list} specifies in which contexts lightning
completion should be active; the possible contexts 
are:
@table @code
@item file names

@item commands

@item lisp functions

@item lisp variables

@item lisp objects

@item user variables

@item buffer names

@item info menu items

@item query-replace
Enable lightning completion on buffer contents when using
@code{query-replace}.  This may not work very well, but I'm working on
it...

@item miscellaneous
Enable lightning completion on everything else.

@end table

The easiest way to specify which contexts you want to enable is to
customize the variable @code{lightning-completion-list} (in the
customization group @code{lightning-completion}).  For each context, you
can turn lightning completion on (with the default delay time) or off,
or you can also specify a number.  If the number is negative, lightning
completion is off; otherwise, lightning completion is on, with that
number for the delay time for that context.  (You can instead use the
@code{lightnify} function to turn completion on or off, if you prefer.
This function is a bit obsolete; in particular, it does not allow you to
set a different delay time for each context.)

I suppose I should explain the effect of the "miscellaneous" context.
Basically, if in some situation you can complete in the minibuffer by
hitting the @key{TAB} key, then enabling miscellaneous completion
means that lightning completion will be on in that situation.  For
example, in the news-reader Gnus, if you hit @kbd{j} (to run
@code{gnus-group-jump-to-group}), then you will be thrown into lightning
completion mode, completing on newsgroup names (you will see the message
``Completing something...'').



@comment ---------------------------------------------------------

@comment  node-name,  next,  previous,  up
@node Settings for lightning completion, , Enabling automatic lightning completion, Lightning completion
@section Settings for lightning completion

@cindex Recursive minibuffers
@cindex Lightning completion and recursive minibuffers
@cindex Disabling lightning completion for particular commands
@cindex lc-dark-commands

Lightning completion doesn't always work the way you want it, so there
are some ways of partially disabling it.

For example, lightning completion doesn't work terribly well with
recursive minibuffers, so there is a customizable variable
@code{lc-dark-recursive-minibufs}.  If this is nil, then lightning
completion proceeds unhindered.  If this has a numerical value @var{N},
then lightning completion is disabled when the recursion depth is larger
than @var{N}.  If this has some other non-nil value, then it is treated
as if it had value 1 (disabling lightning completion in any recursive
situation).

You might also want to, say, enable lightning completion on file names,
but disable it for particular commands.  To do this, customize the
variable @code{lc-dark-commands}, which is a list of functions.  For
example, if you want to disable lightning completion when using
@code{insert-file}, then add @code{insert-file} to this list.
If you want two versions of a command like @code{insert-file}, only one
of which uses lightning completion, then make an alias to
@code{insert-file}, and disable lightning completion on that function: 

@example
(defalias 'insert-file-dark 'insert-file)
@end example

@noindent
and add @code{insert-file-dark} to @code{lc-dark-commands}.  I
personally have functions like @code{dired-create-directory},
@code{dired-do-symlink}, and @code{query-replace-regexp} in my list of
dark commands.




@comment ---------------------------------------------------------

@node Installation and customization, Miscellany, Lightning completion, top
@chapter Installation and customization

@cindex Installation
@cindex Customization

Once you've unpacked the archive, you need to make sure that the file
@file{light.el} is in your emacs load-path.  Then put

@example
(require 'light)
@end example

@noindent
in your @file{.emacs} file.  Restart emacs; then you can set all of the
lightning completion options via customization: run

@example
M-x customize-group lightning-completion
@end example

@menu
* Customizable options::        A list of customizable options
@end menu




@comment ---------------------------------------------------------

@comment  node-name,  next,  previous,  up
@node Customizable options, , , Installation and customization
@section Customizable options

@cindex Customizable options
@cindex List of customizable options
@cindex Options

Here is a list of the customizable options for lightning completion,
with pointers to relevant sections of this documentation.  Use this
command:

@example
M-x customize-group lightning-completion
@end example

@noindent
to customize any of these options.

@table @code
@item lc-complete-idle-time-default
Default value: 0.5.  Effect: when in lightning completion mode, after
this much idle time (in seconds) has elapsed, try to complete.
@xref{Overview}, @xref{Key bindings}.

@item toggle-lightning-completion
Default value: off.  Effect: toggle whether lightning completion is
potentially active in the minibuffer.  If on, you should customize
@code{lightning-completion-list} to specify contexts in which to use
lightning completion.
@xref{Enabling automatic lightning completion}.

@item lightning-completion-list
Default value: all off.  Effect: toggle lightning completion in, and
specify the idle-time for, specific contexts: files, functions,
commands, variables, user variables, lisp objects, info menu items,
buffer names, query replace, miscellany.
@xref{Enabling automatic lightning completion}.

@item lc-clean-up
Default value: nil.  Effect: If on, when there is no valid completion,
remove the invalid characters.  If off, just give warning when no valid
completion.
@xref{Key bindings}.

@item lc-ignored-file-extensions
Default value: equal to @code{completion-ignored-extensions}.
Description: a list of strings like ".dvi" and ".o"; files ending in
these strings are ignored when doing lightning completion on file names.
@xref{Ignoring some files}.

@item lc-dark-commands
Default value: nil.  Description: list of commands for which lightning
completion is disabled.
@xref{Settings for lightning completion}.

@item lc-dark-recursive-minibufs
Default value: nil.  Effect: If a number @var{N}, then don't use
lightning completion when recursion-depth is bigger than @var{N}.  If
nil, then no restrictions on when to use lightning completion.
@xref{Settings for lightning completion}.

@item lc-override-flag
Default value: nil.  Effect: If non-nil, override other local maps when
using lightning completion.  You may want to turn this on if using
outline mode or some other minor mode which uses C-c as prefix.  This
may not be necessary, though.

@item lc-keep-key
Default value: @key{SPC}.  Description: Key to keep current completion
in lightning completion mode.
@xref{Key bindings}.

@item lc-del-key
Default value: @key{DEL}.  Description: Key to delete last
completion unit in lightning completion mode.
@xref{Key bindings}.

@item lc-stop-key
Default value: @kbd{C-c}.  Description: Key to exit lightning completion
mode. 
@xref{Key bindings}.

@item lc-quote-key
Default value: @kbd{C-q}.  Description: Key to quote next character in 
lightning completion mode. 
@xref{Key bindings}.

@item lc-help-key
Default value: @kbd{C-h}.  Description: Help key in lightning completion
mode.
@xref{Key bindings}.

@item lc-cycle-key
Default value: @kbd{C-f}.  Description: Key to cycle to next completion
in lightning completion mode.
@xref{Key bindings}.

@item lc-back-cycle-key
Default value: @kbd{C-b}.  Description: Key to cycle to previous
completion in lightning completion mode.
@xref{Key bindings}.

@item lc-display-key
Default value: @key{TAB}.  Description: Key to display all completions
in lightning completion mode.
@xref{Key bindings}.

@item lc-ctrl-x-c-is-completion
Default value: nil.  Effect: if on, @kbd{C-x c} is the prefix key for
the various lightning completion commands.
@xref{Completion functions}.

@item lc-ctrl-backslash-completes-a-la-mode
Default value: nil.  Effect: if on, @kbd{C-\} runs the function
@code{completing-insert-according-to-mode}.
@xref{Completion functions}.

@end table





@comment ---------------------------------------------------------

@node Miscellany, , Installation and customization, top
@chapter Miscellany

@menu
* Ignoring some files::         Don't to complete on certain file names
* Buffer completion::           An application of lightning completion
* HTML mode completion::        Another example
@end menu



@comment ---------------------------------------------------------

@comment  node-name,  next,  previous,  up
@node Ignoring some files, Buffer completion, , Miscellany
@section Ignoring some files

@cindex Ignoring some files
@cindex Ignored file extensions
@cindex lc-ignored-file-extensions
@cindex completion-ignored-extensions

If you are using this package to complete on file names, then you should
be aware of the lisp variable @code{completion-ignored-extensions}.
(Lightning completion on file names is based on a completion mode
already present in Emacs, and this variable comes from that mode.)

Here is its documentation: ``Completion ignores filenames ending in
any string in this list.  This variable does not affect lists of
possible completions, but does affect the commands that actually do
completions.''

Lightning completion mode uses a similar variable, called
@code{lc-ignored-file-extensions}, whose default value is equal to
@code{completion-ignored-extensions}.

I use La@TeX{}, and when I start with a file @file{bozo.tex}, then 
La@TeX{} produces a number of auxiliary files: @file{bozo.aux},
@file{bozo.dvi}, @file{bozo.log}, and possibly @file{bozo.bbl},
@file{bozo.blg}, @file{bozo.toc}, @file{bozo.lof}, etc.  When I am
editing such a file, I edit the file @file{bozo.tex} frequently, and I
almost never touch the others.  So I make sure that
@code{lc-ignored-file-extensions} contains the strings ``.toc''
``.log'' ''.aux'' ``.lof'' ``.blg'' ``.bbl'' ``.dvi''.  The easiest way
to do this is to customize this variable.

In case you haven't been paying attention: suppose I have added "aux" to
@code{lc-ignored-file-extensions}, and I want to find the file
@file{bozo.aux}, with lightning completion enabled.  One way to do this
is to type @samp{bozo.aux} quickly enough that emacs is never idle for
half a second.  Another option is to hit @kbd{C-c} right at the start,
to turn off lightning completion; then just type in @samp{bozo.aux} at
one's leisure.  Another way to do this is to use lightning completion to
get @samp{bozo.tex} and ending completion there (if this is the only
file that starts @samp{bozo} that doesn't end in an ignored extension,
completion will end automatically at this point; otherwise, hit
@key{SPC}).  Then delete @samp{tex} and type in @samp{aux}.  There are
other ways of doing this, no doubt, but I'll let you figure them out.



@comment ---------------------------------------------------------

@node  Buffer completion, HTML mode completion, Ignoring some files, Miscellany
@section Buffer completion

@cindex Buffer completion
@cindex Completion on buffer contents
@cindex Lightning completion on buffer contents
@findex completing-insert-buffer-contents

Buffer completion is an example of a use of lightning completion: it
lets you complete on reasonably balanced substrings of a buffer.  The
main function is

@example
(completing-insert-buffer-contents BUF)
@end example

@noindent
where @var{BUF} is interactively the current buffer or, with a prefix
argument, a buffer specified by the user.

In other words, if I want to repeat something I said somewhere else in
this buffer, I call the function
@code{completing-insert-buffer-contents}.  At that point, I enter
lightning completion mode on the contents of this buffer.  If I want to
repeat something I said in a different buffer, I hit @kbd{C-u} and then
call @code{completing-insert-buffer-contents}.  Emacs prompts me for a
buffer name, and then does lightning completion on the contents of that
other buffer.  This is useful if you're too lazy to switch buffers, find
the material you want to copy, mark it, kill it, and yank it.

The @file{dabbrev} package (included as part of the standard GNU Emacs
distribution) does some similar things, so you might want to look at
that, too.  I won't advocate the use of one package over the other---I
think each has its uses.


@comment ---------------------------------------------------------

@node  HTML mode completion, , Buffer completion, Miscellany
@section HTML mode completion

@cindex HTML tags
@cindex Completion on HTML tags
@cindex Lightning completion on HTML tags

Here is another example of how to use lightning completion: you can
automatically complete on HTML tags when in html mode.  I have the
following lines in my @file{.emacs} file.  The first line binds the @kbd{<}
key to the function @code{html-lightning-tag} (you could use a different
key, if you wanted, but since HTML tags all start with this character,
it seems to make sense).  The next lines define this function---it does
lightning completion on HTML tags.  And the remaining lines (starting
with @samp{(defvar html-light-alist}) define the list of HTML tags on
which to complete.  A typical line is @samp{("<h3></h3>" -5)}; the first
entry is the tag, and the second entry is the number of characters from
the end by which the point should be offset (i.e., Emacs inserts the
string @samp{"<h3></h3>"} and then moves forward -5 characters).  (This
whole business is intended to be used with the version of
@code{html-mode} that is contained in the file @file{sgml-mode.el}, part
of (for example) the standard GNU Emacs distribution.

@example
(define-key html-mode-map "<" 'html-lightning-tag)

(defun html-lightning-tag nil
  "Lightning complete control sequence."
  (interactive)
  (insert "<")
  (completing-insert html-light-alist nil 1 'point-adjust-hook
		     "html tags"))

(defvar html-light-alist
  '(
    ("<a href=\"\"></a>" -6)
    ("<h1></h1>" -5)
    ("<h2></h2>" -5)
    ("<h3></h3>" -5)
    ("<h4></h4>" -5)
    ("<h-5></h-5>" -5)
    ("<h6></h6>" -5)
    ("<hr>

" 0)
    ("<!--   -->" -5)    
    ("<img src=\"\" alt=\"\">" -9)
    ("<ol>
<li> 
</ol>" -6)
    ("<ul>
<li> 
</ul>" -6)
    ("<li> " 0)
    ("<dl>
<dt> 
<dd> 
</dl>" -12)
    ("<dt> 
<dd> " -6)
    ("<p>
" 0)
    ("<table>
<tr>
<th> </th>
</tr>
</table>" -20)
    ("<th> </th>" -5)
    ("<tr>
<td> </td>
</tr>" -11)
    ("<td> </td>" -5)
    ("<html>
<head>
<title> </title>
</head>
<body lang=\"EN\">

</body>
</html>" -32)
    ("<address>John H. Palmieri, Department of Mathematics, University
of Notre Dame, John.H.Palmieri.2@@nd.edu</address>
" 0)
    ("<address></address>
" -11)
    ("<cite></cite>" -7)
    ("<kbd></kbd>" -6)
    ("<dfn></dfn>" -6)
    ("<em></em>" -5)
    ("<samp></samp>" -7)
    ("<small></small>" -8)
    ("<strong></strong>" -9)
    ("<sub></sub>" -6)
    ("<sup></sup>" -6)
    ("<tt></tt>" -5)
    ("<var></var>" -6)
    ("<code></code>" -7)
    ("<blockquote>

</blockquote>
" -15)
    ("<math>

</math>
" -9)
    ("<pre>

</pre>
" -8)
    ("<br>

" 0))
  "Alist of html tags for use with lightning completion")
@end example




@comment ---------------------------------------------------------

@node    Function Index, Concept Index,  , top
@unnumbered Function Index

@printindex fn


@comment ---------------------------------------------------------

@node    Concept Index,    ,  Function Index, top
@unnumbered Concept Index

@printindex cp


@comment ---------------------------------------------------------

@contents
@bye
