Emacs provides two equally acceptable ways for user preferences configuration: via customization interface (for more details, see (emacs)Easy Customization) and a configuration file (see (emacs)Init File). Naturally, Company can be configured by both of these approaches.
In order to employ the customization interface, run M-x customize-group RET company.
This interface outputs all the options available for user customization, so you may find it beneficial to review this list even if you are going to configure Company with the configuration file.
For instructions on how to change the settings, see (emacs)Changing a Variable.
Company is a customization-rich package. This section lists some of the core settings that influence its overall behavior.
This is one of the values (together with company-idle-delay
),
based on which Company auto-stars looking up completion candidates.
This option configures how many characters have to be typed in by a
user before candidates start to be collected and displayed. An often
choice nowadays is to configure this option to a lower number than the
default value of 3
.
This is the second of the options that configure Company’s auto-start
behavior (together with company-minimum-prefix-length
). The
value of this option defines how fast Company is going to react to the
typed input, such that setting company-idle-delay
to 0
makes Company react immediately, nil
disables auto-starting,
and a larger value postpones completion auto-start for that number of
seconds. For an even fancier setup, set this option value to a
predicate function, as shown in the following example:
(setq company-idle-delay (lambda () (if (company-in-string-or-comment) nil 0.3)))
You can set this option to t
to disable the auto-start behavior
when in the middle of a symbol.
This option allows to specify in which major modes company-mode
can be enabled by (global-company-mode)
. See Initial Setup.
The default value of t
enables Company in all major modes.
Setting company-global-modes
to nil
equal in action to
toggling off global-company-mode. Providing a list of major
modes results in having company-mode enabled in the listed
modes only. For the opposite result, provide a list of major modes
with not
being the first element of the list, as shown in the
following example:
(setq company-global-modes '(not erc-mode message-mode eshell-mode))
Enable this option to loop (cycle) the candidates’ selection: after selecting the last candidate on the list, a command to select the next candidate does so with the first candidate. By default, this option is disabled, which means the selection of the next candidate stops on the last item. The selection of the previous candidate is influenced by this option similarly.
To allow typing in characters that don’t match the candidates, set the
value of this option to nil
. For an opposite behavior (that
is, to disallow non-matching input), set it to t
. By default,
Company is configured to require a matching input only if the user
invokes completion manually or selects a candidate; by having the
option configured to call the function
company-explicit-action-p
.
This user options allows to configure a string indicator of the enabled company-mode in the mode line. The default value is ‘company’.
One more pair of the user options may instruct Company to complete
with the selected candidate by typing one of the
company-insertion-triggers
. The user option
company-insertion-on-trigger
can be enabled or disabled by
setting its value to one of: nil
, t
, or a predicate
function name.
See (eintr)Predicate.
This option has an effect only when
company-insertion-on-trigger
is enabled. The value can be
one of: a string of characters, a list of syntax description
characters (see (elisp)Syntax Class Table), or a predicate
function. By default, this user option is set to the list of the
syntax characters: (?\ ?\) ?.)
, which translates to the
whitespaces, close parenthesis, and punctuation. It is safe to
configure the value to a character that can potentially be part of a
valid completion; in this case, Company does not treat such characters
as triggers.
Company exposes the following life-cycle hooks: