Completion usually happens in the minibuffer. An exception is completion for Lisp symbol names, which is available in all buffers.
The command M-TAB (
lisp-complete-symbol) takes the
partial Lisp symbol before point to be an abbreviation, and compares it
against all non-trivial Lisp symbols currently known to Emacs. Any
additional characters that they all have in common are inserted at point.
Non-trivial symbols are those that have function definitions, values, or
If there is an open-parenthesis immediately before the beginning of the partial symbol, only symbols with function definitions are considered as completions.
If the partial name in the buffer has more than one possible completion and they have no additional characters in common, a list of all possible completions is displayed in another window.