File: eglot.el.html

Eglot ("Emacs Polyglot") is an Emacs LSP client that stays out of your way.

Typing M-x eglot in some source file is often enough to get you started, if the language server you're looking to use is installed in your system. Please refer to the manual, available from https://joaotavora.github.io/eglot/ or from M-x info for more usage instructions.

If you wish to contribute changes to Eglot, please do read the user manual first. Additionally, take the following in consideration:

* Eglot's main job is to hook up the information that language
  servers offer via LSP to Emacs's UI facilities: Xref for
  definition-chasing, Flymake for diagnostics, Eldoc for at-point
  documentation, etc. Eglot's job is generally *not* to provide
  such a UI itself, though a small number of simple
  counter-examples do exist, e.g. in the eglot-rename command or
  the eglot-inlay-hints-mode(var)/eglot-inlay-hints-mode(fun) minor mode. When a new UI is
  evidently needed, consider adding a new package to Emacs, or
  extending an existing one.

* Eglot was designed to function with just the UI facilities found
  in the latest Emacs core, as long as those facilities are also
  available as GNU ELPA :core packages. Historically, a number of
  :core packages were added or reworked in Emacs to make this
  possible. This principle should be upheld when adding new LSP
  features or tweaking existing ones. Design any new facilities in
  a way that they could work in the absence of LSP or using some
  different protocol, then make sure Eglot can link up LSP
  information to it.

* There are few Eglot configuration variables. This principle
  should also be upheld. If Eglot had these variables, it could be
  duplicating configuration found elsewhere, bloating itself up,
  and making it generally hard to integrate with the ever growing
  set of LSP features and Emacs packages. For instance, this is
  why one finds a single variable
  eglot-ignored-server-capabilities instead of a number of
  capability-specific flags, or why customizing the display of
  LSP-provided documentation is done via ElDoc's variables, not
  Eglot's.

* Linking up LSP information to other libraries is generally done
  in the eglot--managed-mode(var)/eglot--managed-mode(fun) minor mode function, by
  buffer-locally setting the other library's variables to
  Eglot-specific versions. When deciding what to set the variable
  to, the general idea is to choose a good default for beginners
  that doesn't clash with Emacs's defaults. The settings are only
  in place during Eglot's LSP-enriched tenure over a project. Even
  so, some of those decisions will invariably aggravate a minority
  of Emacs power users, but these users can use eglot-stay-out-of
  and eglot-managed-mode-hook to adjust things to their
  preferences.

* On occasion, to enable new features, Eglot can have soft
  dependencies on popular libraries that are not in Emacs core.
  "Soft" means that the dependency doesn't impair any other use of
  Eglot beyond that feature. Such is the case of the snippet
  functionality, via the Yasnippet package, Markdown formatting of
  at-point documentation via the markdown-mode package, and nicer
  looking completions when the Company package is used.

Defined variables (86)

eglot--TextDocumentIdentifier-cacheLSP TextDocumentIdentifier-related cached info for current buffer.
eglot--cached-serverA cached reference to the current Eglot server.
eglot--capf-sessionA cache used by ‘eglot-completion-at-point’.
eglot--change-idle-timerIdle timer for didChange signals.
eglot--diagnosticsA list (DIAGNOSTICS VERSION RESULT-ID) for current buffer.
eglot--docverLSP document version. Bumped on ‘eglot--after-change’.
eglot--flymake-push-report-fnCurrent flymake report function for this buffer.
eglot--highlightsOverlays for ‘eglot-highlight-eldoc-function’.
eglot--inflight-async-requestsAn plist of symbols to lists of JSONRPC ids.
eglot--last-inserted-charIf non-nil, value of the last inserted character in buffer.
eglot--lsp-interface-alistAlist (INTERFACE-NAME . INTERFACE) of known external LSP interfaces.
eglot--lsp-xref-refs‘xref’ objects for overriding ‘xref-backend-references’’s.
eglot--managed-modeNon-nil if Eglot--Managed mode is enabled.
eglot--managed-mode-hookHook run after entering or leaving ‘eglot--managed-mode’.
eglot--outstanding-inlay-hints-regionJit-lock-calculated (FROM . TO) region with potentially outdated hints.
eglot--outstanding-inlay-regions-timerHelper timer for ‘eglot--update-hints’.
eglot--recent-changesRecent buffer changes as collected by ‘eglot--before-change’.
eglot--saved-bindingsBindings saved by ‘eglot--setq-saving’.
eglot--semtok-statePlist describing current semtok state.
eglot--send-changes-hookInternal hook for doing things when the document changes.
eglot--servers-by-projectKeys are projects. Values are lists of processes.
eglot--suggestion-overlayOverlay for ‘eglot-code-action-suggestion’.
eglot--temp-location-buffersHelper variable for ‘eglot--collecting-xrefs’.
eglot--uri-path-allowed-charsLike ‘url-path-allowed-chars’ but more restrictive.
eglot--workspace-symbols-cacheCache of ‘workspace/Symbol’ results used by ‘xref-find-definitions’.
eglot--{}The empty JSON object.
eglot-advertise-cancellationIf non-nil, Eglot attempts to inform server of canceled requests.
eglot-autoreconnectControl ability to reconnect automatically to the LSP server.
eglot-autoshutdownIf non-nil, shut down server after killing last managed buffer.
eglot-cache-session-completionsIf non-nil Eglot caches data during completion sessions.
eglot-code-action-indicationsHow Eglot indicates there’s are code actions available at point.
eglot-code-action-indicatorIndicator string for code action suggestions.
eglot-command-historyHistory of CONTACT arguments to ‘eglot’.
eglot-confirm-server-editsControl if changes proposed by LSP should be confirmed with user.
eglot-confirm-server-initiated-editsControl if changes proposed by LSP should be confirmed with user.
eglot-connect-hookHook run after connecting to a server.
eglot-connect-timeoutNumber of seconds before timing out LSP connection attempts.
eglot-current-column-functionFunction calculating position relative to line beginning.
eglot-current-linepos-functionFunction calculating position relative to line beginning.
eglot-diagnostics-mapKeymap active in Eglot-backed Flymake diagnostic overlays.
eglot-events-buffer-configConfigure the Eglot events buffer.
eglot-extend-to-xrefIf non-nil, activate Eglot in cross-referenced non-project files.
eglot-hierarchy-label-mapKeymap active in labels Eglot hierarchy buffers.
eglot-hierarchy-mode-abbrev-tableAbbrev table for ‘eglot-hierarchy-mode’.
eglot-hierarchy-mode-hookHook run after entering ‘eglot-hierarchy-mode’.
eglot-hierarchy-mode-mapKeymap for ‘eglot-hierarchy-mode’.
eglot-hierarchy-mode-syntax-tableSyntax table for ‘eglot-hierarchy-mode’.
eglot-ignored-server-capabilitesLSP server capabilities that Eglot could use, but won’t.
eglot-ignored-server-capabilitiesLSP server capabilities that Eglot could use, but won’t.
eglot-inlay-hints-modeNon-nil if Eglot-Inlay-Hints mode is enabled.
eglot-inlay-hints-mode-hookHook run after entering or leaving ‘eglot-inlay-hints-mode’.
eglot-list-connections-mode-abbrev-tableAbbrev table for ‘eglot-list-connections-mode’.
eglot-list-connections-mode-hookHook run after entering ‘eglot-list-connections-mode’.
eglot-list-connections-mode-mapKeymap for ‘eglot-list-connections-mode’.
eglot-list-connections-mode-syntax-tableSyntax table for ‘eglot-list-connections-mode’.
eglot-lsp-contextDynamically non-nil when searching for projects in LSP context.
eglot-managed-mode-hookA hook run by Eglot after it started/stopped managing a buffer.
eglot-menuEglot
eglot-menu-stringString displayed in mode line when Eglot is active.
eglot-mode-line-action-suggestionEglot mode line construct for at-point code actions.
eglot-mode-line-errorEglot mode line construct for LSP errors.
eglot-mode-line-formatMode line construct for customizing Eglot information.
eglot-mode-line-menuEglot mode line construct for Eglot’s main menu.
eglot-mode-line-pending-requestsEglot mode line construct for number of pending LSP requests.
eglot-mode-line-progressEglot mode line construct for LSP progress reports.
eglot-mode-line-sessionEglot mode line construct for project/LSP session.
eglot-move-to-column-functionFunction to move to a position within a line reported by the LSP server.
eglot-move-to-linepos-functionFunction to move to a position within a line reported by the LSP server.
eglot-prefer-plaintextIf non-nil, always request plaintext responses to hover requests.
eglot-report-progressIf non-nil, show progress of long running LSP server work.
eglot-semantic-token-modifiersLSP-supplied semantic modifiers Eglot should consider.
eglot-semantic-token-typesLSP-supplied semantic types Eglot should consider.
eglot-semantic-tokens-modeNon-nil if Eglot-Semantic-Tokens mode is enabled.
eglot-semantic-tokens-mode-hookHook run after entering or leaving ‘eglot-semantic-tokens-mode’.
eglot-send-changes-idle-timeDon’t tell server of changes before Emacs’s been idle for this many seconds.
eglot-server-initialized-hookHook run after a ‘eglot-lsp-server’ instance is created.
eglot-server-menuManage server communication
eglot-server-programsHow the command ‘eglot’ guesses the server to start.
eglot-stay-out-ofList of Emacs things that Eglot should try to stay of.
eglot-strict-modeHow strictly to check LSP interfaces at compile- and run-time.
eglot-sync-connectControl blocking of LSP connection attempts.
eglot-watch-files-outside-project-rootIf non-nil, allow watching files outside project root
eglot-withhold-process-idIf non-nil, Eglot will not send the Emacs process id to the language server.
eglot-workspace-configurationConfigure LSP servers specifically for a given project.
eglot-xref-lessp-functionCompare two ‘xref-item’ objects for sorting.
eglot-{}The empty JSON object.

Defined functions (223)

(setf eglot--capabilities)(eglot--capabilities\) ARG0 ARG &rest ARGS)
(setf eglot--file-watches)(eglot--file-watches\) ARG0 ARG &rest ARGS)
(setf eglot--inhibit-autoreconnect)(eglot--inhibit-autoreconnect\) ARG0 ARG &rest ARGS)
(setf eglot--languages)(eglot--languages\) ARG0 ARG &rest ARGS)
(setf eglot--managed-buffers)(eglot--managed-buffers\) ARG0 ARG &rest ARGS)
(setf eglot--progress-reporters)(eglot--progress-reporters\) ARG0 ARG &rest ARGS)
(setf eglot--project)(eglot--project\) ARG0 ARG &rest ARGS)
(setf eglot--project-nickname)(eglot--project-nickname\) ARG0 ARG &rest ARGS)
(setf eglot--saved-initargs)(eglot--saved-initargs\) ARG0 ARG &rest ARGS)
(setf eglot--server-info)(eglot--server-info\) ARG0 ARG &rest ARGS)
(setf eglot--shutdown-requested)(eglot--shutdown-requested\) ARG0 ARG &rest ARGS)
eglot(MANAGED-MAJOR-MODES PROJECT CLASS CONTACT LANGUAGE-IDS &optional INTERACTIVE)
eglot--TextDocumentIdentifier()
eglot--TextDocumentItem()
eglot--TextDocumentPositionParams()
eglot--VersionedTextDocumentIdentifier()
eglot--after-change(BEG END PRE-CHANGE-LENGTH)
eglot--after-revert-hook()
eglot--all-major-modes()
eglot--apply-text-edits(EDITS &optional VERSION SILENT)
eglot--apply-workspace-edit(WEDIT ORIGIN)
eglot--async-request
eglot--before-change(BEG END)
eglot--bol(&optional ARG1)
eglot--cancel-inflight-async-requests(&optional (HINTS '(:textDocument/signatureHelp :textDocument/hover :textDocument/documentHighlight :textDocument/codeAction)))
eglot--capabilities(ARG &rest ARGS)
eglot--capf-session-flush(&optional _)
eglot--check-dspec(INTERFACE-NAME DSPEC)
eglot--check-object(INTERFACE-NAME OBJECT &optional (ENFORCE-REQUIRED t) (DISALLOW-NON-STANDARD t) (CHECK-TYPES t))
eglot--cmd(CONTACT)
eglot--code-action(NAME KIND)
eglot--code-action-bounds()
eglot--code-action-params
eglot--collecting-xrefs((COLLECTOR) &rest BODY)
eglot--confirm-server-edits(ORIGIN PREPARED)
eglot--connect(MANAGED-MODES PROJECT CLASS CONTACT LANGUAGE-IDS)
eglot--current-project()
eglot--current-server-or-lose()
eglot--dbind(VARS OBJECT &body BODY)
eglot--dcase(OBJ &rest CLAUSES)
eglot--define-hierarchy-command(NAME KIND FEATURE PREPARER SPECS)
eglot--delete-overlays(&optional (PROP 'eglot--overlays))
eglot--diag-to-lsp-diag(DIAG)
eglot--dumb-allc(PAT TABLE PRED POINT)
eglot--dumb-flex(PAT COMP IGNORECASE)
eglot--dumb-tryc(PAT TABLE PRED POINT)
eglot--ensure-list(OBJECT)
eglot--ensure-type(K)
eglot--error(FORMAT &rest ARGS)
eglot--executable-find(COMMAND &optional REMOTE)
eglot--file-watches(ARG &rest ARGS)
eglot--flymake-diag-type(SEVERITY)
eglot--flymake-diagnostics(BEG &optional END)
eglot--flymake-make-diag(DIAG-SPEC VERSION)
eglot--flymake-pull()
eglot--flymake-push(&optional VOID)
eglot--format(FORMAT &rest ARGS)
eglot--format-markup(MARKUP &optional MODE)
eglot--glob-compile(GLOB &optional BYTE-COMPILE NOERROR)
eglot--glob-emit-*(_ SELF NEXT)
eglot--glob-emit-**(_ SELF NEXT)
eglot--glob-emit-?(_ SELF NEXT)
eglot--glob-emit-range(ARG SELF NEXT)
eglot--glob-emit-self(TEXT SELF NEXT)
eglot--glob-emit-{}(ARG SELF NEXT)
eglot--glob-fsm
eglot--glob-parse(GLOB)
eglot--goto(RANGE)
eglot--guess-contact(&optional INTERACTIVE)
eglot--hierarchy-1(NAME PROVIDER PREPARER SPECS)
eglot--hierarchy-children(NODE)
eglot--hierarchy-interactive(SPECS)
eglot--hierarchy-label(NODE PARENT-URI)
eglot--hover-info(CONTENTS &optional RANGE)
eglot--imenu-DocumentSymbol(RES)
eglot--imenu-SymbolInformation(RES)
eglot--inhibit-autoreconnect(ARG &rest ARGS)
eglot--interface(INTERFACE-NAME)
eglot--keywordize-vars(VARS)
eglot--lambda(CL-LAMBDA-LIST &body BODY)
eglot--language-ids(S)
eglot--languageId(&optional (SERVER (eglot--current-server-or-lose)))
eglot--languages(ARG &rest ARGS)
eglot--lookup-mode(MODE)
eglot--lsp-position-to-point(POS-PLIST &optional MARKER)
eglot--lsp-xref-helper
eglot--lsp-xrefs-for-method
eglot--major-modes(S)
eglot--managed-buffers(ARG &rest ARGS)
eglot--managed-mode(&optional ARG)
eglot--managed-mode-off()
eglot--maybe-activate-editing-mode()
eglot--message(FORMAT &rest ARGS)
eglot--mode-line-props(THING FACE DEFS &optional PREPEND)
eglot--mouse-call(WHAT &optional UPDATE-MODE-LINE)
eglot--on-shutdown(SERVER)
eglot--path-to-uri
eglot--plist-keys(PLIST)
eglot--pos-to-lsp-position(&optional POS)
eglot--post-self-insert-hook()
eglot--pre-command-hook()
eglot--progress-reporters(ARG &rest ARGS)
eglot--project(ARG &rest ARGS)
eglot--project-nickname(ARG &rest ARGS)
eglot--propose-changes-as-diff(PREPARED)
eglot--range-region(RANGE &optional MARKERS)
eglot--read-execute-code-action(ACTIONS SERVER &optional ACTION-KIND)
eglot--read-server(PROMPT &optional DONT-IF-JUST-THE-ONE)
eglot--recover-workspace-symbol-meta(STRING)
eglot--register-unregister(SERVER THINGS HOW)
eglot--reporter-update(REPORTER &optional VALUE SUFFIX)
eglot--request
eglot--saved-initargs(ARG &rest ARGS)
eglot--semtok-apply-delta-edits(OLD-DATA EDITS)
eglot--semtok-decode-token(TOK)
eglot--semtok-font-lock(LIMIT)
eglot--semtok-font-lock-1(BEG END DATA)
eglot--semtok-font-lock-2(BEG END)
eglot--semtok-request(BEG END)
eglot--server-capable(&rest FEATS)
eglot--server-capable-or-lose(&rest FEATS)
eglot--server-info(ARG &rest ARGS)
eglot--setq-saving(SYMBOL BINDING)
eglot--shutdown-requested(ARG &rest ARGS)
eglot--sig-info(SIG &optional SIG-ACTIVE BRIEFP)
eglot--signal-textDocument/didChange()
eglot--signal-textDocument/didClose()
eglot--signal-textDocument/didOpen()
eglot--signal-textDocument/didSave()
eglot--signal-textDocument/willSave()
eglot--snippet-expansion-fn()
eglot--stay-out-of-p(SYMBOL)
eglot--trampish-p(SERVER)
eglot--update-hints(FROM TO)
eglot--update-hints-1(FROM TO)
eglot--uri-to-path(URI)
eglot--warn(FORMAT &rest ARGS)
eglot--watch-globs(SERVER ID GLOBS DIR IN-ROOT)
eglot--when-buffer-window(BUF &body BODY)
eglot--when-live-buffer(BUF &rest BODY)
eglot--widening(&rest BODY)
eglot--workspace-configuration-plist(SERVER &optional PATH)
eglot--workspace-symbols(PAT &optional BUFFER)
eglot--xref-make-match(NAME URI RANGE)
eglot-alternatives(ALTERNATIVES)
eglot-clear-status(SERVER)
eglot-client-capabilities(SERVER)
eglot-code-action-extract(BEG &optional END)
eglot-code-action-inline(BEG &optional END)
eglot-code-action-organize-imports(BEG &optional END)
eglot-code-action-quickfix(BEG &optional END)
eglot-code-action-rewrite(BEG &optional END)
eglot-code-action-suggestion(CB &rest IGNORED)
eglot-code-actions(BEG &optional END ACTION-KIND INTERACTIVE)
eglot-code-actions-at-mouse(ARG1)
eglot-completion-at-point()
eglot-current-column()
eglot-current-server()
eglot-ensure()
eglot-events-buffer(SERVER)
eglot-execute(SERVER ACTION)
eglot-execute-command(_ _ _)
eglot-find-declaration()
eglot-find-implementation()
eglot-find-typeDefinition()
eglot-flymake-backend(REPORT-FN &rest MORE)
eglot-forget-pending-continuations(SERVER)
eglot-format(&optional BEG END ON-TYPE-FORMAT)
eglot-format-buffer()
eglot-handle-notification(SERVER METHOD &rest PARAMS)
eglot-handle-request(SERVER METHOD &rest PARAMS)
eglot-hierarchy-center-on-node()
eglot-hierarchy-detail-eldoc-function(CB &rest IGNORED)
eglot-hierarchy-locus-eldoc-function(CB &rest IGNORED)
eglot-hierarchy-mode()
eglot-highlight-eldoc-function(CB &rest IGNORED)
eglot-hover-eldoc-function(CB &rest IGNORED)
eglot-imenu()
eglot-initialization-options(SERVER)
eglot-inlay-hints-mode(&optional ARG)
eglot-list-connections()
eglot-list-connections-mode()
eglot-lsp-abiding-column(&optional LBP)
eglot-lsp-server(&rest SLOTS)
eglot-lsp-server--eieio-childp(OBJ)
eglot-lsp-server-child-p(OBJ)
eglot-lsp-server-p(OBJ)
eglot-managed-p()
eglot-manual()
eglot-menu(ARG1)
eglot-move-to-current-column(N)
eglot-move-to-lsp-abiding-column(N)
eglot-move-to-utf-16-linepos(N)
eglot-move-to-utf-32-linepos(N)
eglot-move-to-utf-8-linepos(N)
eglot-path-to-uri
eglot-project-nickname(ARG &rest ARGS)
eglot-range-region(RANGE &optional MARKERS)
eglot-reconnect(SERVER &optional INTERACTIVE)
eglot-region-range(FROM TO)
eglot-register-capability(SERVER METHOD ID &rest PARAMS)
eglot-rename(NEWNAME)
eglot-semantic-tokens-mode(&optional ARG)
eglot-server-capable(&rest FEATS)
eglot-server-capable-or-lose(&rest FEATS)
eglot-server-menu(ARG1)
eglot-show-call-hierarchy(DIRECTION)
eglot-show-type-hierarchy(DIRECTION)
eglot-show-workspace-configuration(&optional SERVER)
eglot-shutdown(SERVER &optional INTERACTIVE TIMEOUT PRESERVE-BUFFERS)
eglot-shutdown-all(&optional PRESERVE-BUFFERS)
eglot-signal-didChangeConfiguration(SERVER)
eglot-signature-eldoc-function(CB &rest IGNORED)
eglot-stderr-buffer(SERVER)
eglot-unregister-capability(SERVER METHOD ID &rest PARAMS)
eglot-update(&rest _)
eglot-upgrade-eglot(&rest _)
eglot-uri-to-path(URI)
eglot-utf-16-linepos(&optional LBP)
eglot-utf-32-linepos()
eglot-utf-8-linepos()
eglot-workspace-folders(SERVER)
eglot-xref-backend()

Defined faces (41)

eglot-code-action-indicator-faceFace used for code action suggestions.
eglot-diagnostic-tag-deprecated-faceFace used to render deprecated or obsolete code.
eglot-diagnostic-tag-unnecessary-faceFace used to render unused or unnecessary code.
eglot-highlight-symbol-faceFace used to highlight the symbol at point.
eglot-inlay-hint-faceFace used for inlay hint overlays.
eglot-mode-lineFace for package-name in Eglot’s mode line.
eglot-parameter-hint-faceFace used for parameter inlay hint overlays.
eglot-semantic-abstractFace for painting a ‘abstract’ LSP semantic token
eglot-semantic-asyncFace for painting a ‘async’ LSP semantic token
eglot-semantic-classFace for painting a ‘class’ LSP semantic token
eglot-semantic-commentFace for painting a ‘comment’ LSP semantic token
eglot-semantic-declarationFace for painting a ‘declaration’ LSP semantic token
eglot-semantic-decoratorFace for painting a ‘decorator’ LSP semantic token
eglot-semantic-defaultLibraryFace for painting a ‘defaultLibrary’ LSP semantic token
eglot-semantic-definitionFace for painting a ‘definition’ LSP semantic token
eglot-semantic-deprecatedFace for painting a ‘deprecated’ LSP semantic token
eglot-semantic-documentationFace for painting a ‘documentation’ LSP semantic token
eglot-semantic-enumFace for painting a ‘enum’ LSP semantic token
eglot-semantic-enumMemberFace for painting a ‘enumMember’ LSP semantic token
eglot-semantic-eventFace for painting a ‘event’ LSP semantic token
eglot-semantic-functionFace for painting a ‘function’ LSP semantic token
eglot-semantic-interfaceFace for painting a ‘interface’ LSP semantic token
eglot-semantic-keywordFace for painting a ‘keyword’ LSP semantic token
eglot-semantic-macroFace for painting a ‘macro’ LSP semantic token
eglot-semantic-methodFace for painting a ‘method’ LSP semantic token
eglot-semantic-modificationFace for painting a ‘modification’ LSP semantic token
eglot-semantic-modifierFace for painting a ‘modifier’ LSP semantic token
eglot-semantic-namespaceFace for painting a ‘namespace’ LSP semantic token
eglot-semantic-numberFace for painting a ‘number’ LSP semantic token
eglot-semantic-operatorFace for painting a ‘operator’ LSP semantic token
eglot-semantic-parameterFace for painting a ‘parameter’ LSP semantic token
eglot-semantic-propertyFace for painting a ‘property’ LSP semantic token
eglot-semantic-readonlyFace for painting a ‘readonly’ LSP semantic token
eglot-semantic-regexpFace for painting a ‘regexp’ LSP semantic token
eglot-semantic-staticFace for painting a ‘static’ LSP semantic token
eglot-semantic-stringFace for painting a ‘string’ LSP semantic token
eglot-semantic-structFace for painting a ‘struct’ LSP semantic token
eglot-semantic-typeFace for painting a ‘type’ LSP semantic token
eglot-semantic-typeParameterFace for painting a ‘typeParameter’ LSP semantic token
eglot-semantic-variableFace for painting a ‘variable’ LSP semantic token
eglot-type-hint-faceFace used for type inlay hint overlays.