GNU Emacs Lisp Reference Manual
Abbrevs are usually expanded by commands for interactive use, including self-insert-command. This section describes the subroutines used in writing such functions, as well as the variables they use for communication.
nil if that abbrev is not defined. The optional second argument table is the abbrev table to look it up in. If table is nil, this function tries first the current buffer's local abbrev table, and second the global abbrev table.abbrev-symbol.t if it did expansion, nil otherwise.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.nil, an abbrev entered entirely in upper case is expanded using all upper case. Otherwise, an abbrev entered entirely in upper case is expanded by capitalizing each word of the expansion.expand-abbrev to use as the start of the next abbrev to be expanded. (nil means use the word before point instead.) abbrev-start-location is set to nil each time expand-abbrev is called. This variable is also set by abbrev-prefix-mark.abbrev-start-location has been set. Trying to expand an abbrev in any other buffer clears abbrev-start-location. This variable is set by abbrev-prefix-mark.abbrev-symbol of the last abbrev expanded. This information is left by expand-abbrev for the sake of the unexpand-abbrev command.expand-abbrev for the sake of the unexpand-abbrev command.nil if the abbrev has already been unexpanded. This contains information left by expand-abbrev for the sake of the unexpand-abbrev command.The following sample code shows a simple use of 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.
(add-hook 'pre-abbrev-expand-hook 'query-if-not-space) ;; This is the function invoked bypre-abbrev-expand-hook. ;; If the user terminated the abbrev with a space, the function does ;; nothing (that is, it returns so that the abbrev can expand). If the ;; user entered some other character, this function asks whether ;; expansion should continue. ;; If the user answers the prompt with y, the function returns ;;nil(because of thenotfunction), but that is ;; acceptable; the return value has no effect on expansion. (defun query-if-not-space () (if (/= ?\ (preceding-char)) (if (not (y-or-n-p "Do you want to expand this abbrev? ")) (error "Not expanding this abbrev"))))