]> code.delx.au - gnu-emacs/blobdiff - lispref/abbrevs.texi
(idlwave-completion-help-info): Add defvar.
[gnu-emacs] / lispref / abbrevs.texi
index 33ebecd70e58916b877c1f470209f859462ae8ea..38c5854adc65d6c072889bd1b1d462e80c3b6335 100644 (file)
@@ -1,7 +1,7 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1999
-@c   Free Software Foundation, Inc.
+@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1999, 2002, 2003, 2004,
+@c   2005 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @setfilename ../info/abbrevs
 @node Abbrevs, Processes, Syntax Tables, Top
 @c See the file elisp.texi for copying conditions.
 @setfilename ../info/abbrevs
 @node Abbrevs, Processes, Syntax Tables, Top
@@ -269,10 +269,10 @@ returns @code{nil} even though expansion did occur.
 @end deffn
 
 @deffn Command abbrev-prefix-mark &optional arg
 @end deffn
 
 @deffn Command abbrev-prefix-mark &optional arg
-This command marks current point as the beginning of an abbrev.  The
-next call to @code{expand-abbrev} will use the text from here to point
-(where it is then) as the abbrev to expand, rather than using the
-previous word as usual.
+This command marks the current location of point as the beginning of
+an abbrev.  The next call to @code{expand-abbrev} will use the text
+from here to point (where it is then) as the abbrev to expand, rather
+than using the previous word as usual.
 
 First, this command expands any abbrev before point, unless @var{arg}
 is non-@code{nil}.  (Interactively, @var{arg} is the prefix argument.)
 
 First, this command expands any abbrev before point, unless @var{arg}
 is non-@code{nil}.  (Interactively, @var{arg} is the prefix argument.)
@@ -288,12 +288,12 @@ expansion.
 @end defopt
 
 @defvar abbrev-start-location
 @end defopt
 
 @defvar abbrev-start-location
-This is a marker pointing to the buffer position for
-@code{expand-abbrev} to use as the start of the next abbrev to be
-expanded.  (@code{nil} means use the word before point instead.)
-@code{abbrev-start-location} is set to @code{nil} each time
-@code{expand-abbrev} is called.  This variable is also set by
-@code{abbrev-prefix-mark}.
+The value of this variable is a buffer position (an integer or a marker)
+for @code{expand-abbrev} to use as the start of the next abbrev to be
+expanded.  The value can also be @code{nil}, which means to use the
+word before point instead.  @code{abbrev-start-location} is set to
+@code{nil} each time @code{expand-abbrev} is called.  This variable is
+also set by @code{abbrev-prefix-mark}.
 @end defvar
 
 @defvar abbrev-start-location-buffer
 @end defvar
 
 @defvar abbrev-start-location-buffer
@@ -331,35 +331,43 @@ hook, the hook functions receive no arguments.  However, they can find
 the abbrev to be expanded by looking in the buffer before point.
 Running the hook is the first thing that @code{expand-abbrev} does, and
 so a hook function can be used to change the current abbrev table before
 the abbrev to be expanded by looking in the buffer before point.
 Running the hook is the first thing that @code{expand-abbrev} does, and
 so a hook function can be used to change the current abbrev table before
-abbrev lookup happens.
+abbrev lookup happens.  (Although you have to do this carefully.  See
+the example below.)
 @end defvar
 
   The following sample code shows a simple use of
 @end defvar
 
   The following sample code shows a simple use of
-@code{pre-abbrev-expand-hook}.  If the user terminates an abbrev with a
-punctuation character, the hook function asks for confirmation.  Thus,
-this hook allows the user to decide whether to expand the abbrev, and
-aborts expansion if it is not confirmed.
+@code{pre-abbrev-expand-hook}.  It assumes that @code{foo-mode} is a
+mode for editing certain files in which lines that start with @samp{#}
+are comments.  You want to use Text mode abbrevs for those lines.  The
+regular local abbrev table, @code{foo-mode-abbrev-table} is
+appropriate for all other lines.  Then you can put the following code
+in your @file{.emacs} file.  @xref{Standard Abbrev Tables}, for the
+definitions of @code{local-abbrev-table} and @code{text-mode-abbrev-table}.
 
 @smallexample
 
 @smallexample
-(add-hook 'pre-abbrev-expand-hook 'query-if-not-space)
-
-;; @r{This is the function invoked by @code{pre-abbrev-expand-hook}.}
-
-;; @r{If the user terminated the abbrev with a space, the function does}
-;; @r{nothing (that is, it returns so that the abbrev can expand).  If the}
-;; @r{user entered some other character, this function asks whether}
-;; @r{expansion should continue.}
-
-;; @r{If the user answers the prompt with @kbd{y}, the function returns}
-;; @r{@code{nil} (because of the @code{not} function), but that is}
-;; @r{acceptable; the return value has no effect on expansion.}
-
-(defun query-if-not-space ()
-  (if (/= ?\s  (preceding-char))
-      (if (not (y-or-n-p "Do you want to expand this abbrev? "))
-          (error "Not expanding this abbrev"))))
+(defun foo-mode-pre-abbrev-expand ()
+  (when (save-excursion (forward-line 0) (eq (char-after) ?#))
+    (let ((local-abbrev-table text-mode-abbrev-table)
+         ;; Avoid infinite loop.
+         (pre-abbrev-expand-hook nil))
+      (expand-abbrev))
+    ;; We have already called `expand-abbrev' in this hook.
+    ;; Hence we want the "actual" call following this hook to be a no-op.
+    (setq abbrev-start-location (point-max)
+         abbrev-start-location-buffer (current-buffer))))
+
+(add-hook 'foo-mode-hook
+         #'(lambda ()
+             (add-hook 'pre-abbrev-expand-hook
+                       'foo-mode-pre-abbrev-expand
+                       nil t)))
 @end smallexample
 
 @end smallexample
 
+Note that @code{foo-mode-pre-abbrev-expand} just returns @code{nil}
+without doing anything for lines not starting with @samp{#}.  Hence
+abbrevs expand normally using @code{foo-mode-abbrev-table} as local
+abbrev table for such lines.
+
 @node Standard Abbrev Tables,  , Abbrev Expansion, Abbrevs
 @comment  node-name,  next,  previous,  up
 @section Standard Abbrev Tables
 @node Standard Abbrev Tables,  , Abbrev Expansion, Abbrevs
 @comment  node-name,  next,  previous,  up
 @section Standard Abbrev Tables