Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Escape does not close autocomplete window. #4242

Closed
jordwalke opened this issue Dec 20, 2015 · 24 comments
Closed

Escape does not close autocomplete window. #4242

jordwalke opened this issue Dec 20, 2015 · 24 comments
Assignees
Labels

Comments

@jordwalke
Copy link

Hi, I'm brand new to Emacs so thank you for your patience. I'm only even trying Emacs thanks to Spacemacs. The issue I'm seeing is that when hitting escape, Evil goes into normal mode as expected, but any autocomplete window that is open does not close.

This is my entire config:

  (load-theme 'spacemacs-light t)
  (set-face-attribute 'mode-line nil :box nil)
  (set-face-attribute 'mode-line-inactive nil :box nil)
  ;; Don't highlight line
  (global-hl-line-mode -1) ; Disable current line highlight
  (setq evil-want-fine-undo nil)
  (setq evil-move-cursor-back nil)
  (global-set-key (kbd "s-p") 'helm-M-x)
  ; (setq powerline-default-separator 'utf-8)
  (setq powerline-default-separator nil)
  (global-vi-tilde-fringe-mode -1)

These are my enabled layers:

     company
     ;; To toggle autocompletion on:
     ;; space t a 
     auto-completion
     ;; better-defaults
     emacs-lisp
     themes-megapack
     ;; Basic mac keybindings. (Cmd is super, alt is meta)
     osx

I'm on Mac OS Yosemite.

@TheBB
Copy link
Contributor

TheBB commented Jun 14, 2016

Old bug, no activity. I just tried reproducing this on develop but I can't. Is this still a problem?

@Stebalien
Copy link
Contributor

I'm seeing the same thing, but only with some company backends (??). Worse, it doesn't really appear to fully exit insert mode (keys still get inserted until the popup closes).

Specifically, I can reproduce this with company-emoji and notmuch-company.

@NJBS
Copy link
Contributor

NJBS commented Oct 19, 2016

@Stebalien Can you still reproduce this? I'm unable to reproduce the issue using company-emoji.

System Info 💻

  • OS: windows-nt
  • Emacs: 24.5.1
  • Spacemacs: 0.200.3
  • Spacemacs branch: develop (rev. b550945)
  • Graphic display: t
  • Distribution: spacemacs
  • Editing style: vim
  • Completion: helm
  • Layers:
(auto-completion better-defaults bibtex c-c++ dash emacs-lisp git github gtags html java javascript latex markdown ocaml org python racket ranger rust shell shell-scripts helm syntax-checking emoji)

@Stebalien
Copy link
Contributor

Stebalien commented Oct 19, 2016

Yes, I still can.

  1. Open a scratch buffer.
  2. Set the company-backends to company-emoji: (setq company-backends '(company-emoji))
  3. Enable company: (company-mode)
  4. Enter insert mode, type :ta in the buffer, and wait for auto-complete.
  5. Hit escape.

@NJBS
Copy link
Contributor

NJBS commented Oct 19, 2016

Ah, indeed I can now reproduce this.

Strange 😕

@cjolowicz
Copy link

cjolowicz commented Jul 12, 2019

I also have this problem, using auto-completion with hardly any customization on the develop branch of spacemacs.

Full .spacemacs (permalink)

https://github.com/cjolowicz/dotfiles/blob/d6b82bf3e28e9cdcc4b4fbb37474a491b2e53b56/spacemacs/.spacemacs#L12-L13

System Info 💻

  • OS: darwin
  • Emacs: 26.2
  • Spacemacs: 0.300.0
  • Spacemacs branch: develop (rev. 5df46b2)
  • Graphic display: t
  • Distribution: spacemacs
  • Editing style: vim
  • Completion: helm
  • Layers:
((auto-completion :variables auto-completion-complete-with-key-sequence "jk")
 better-defaults
 (c-c++ :variables c-c++-default-mode-for-headers 'c++-mode c-c++-enable-clang-support t c-c++-backend 'rtags)
 chrome cmake docker emacs-lisp graphviz git helm html
 (javascript :variables javascript-fmt-tool 'prettier javascript-import-tool 'import-js js2-basic-offset 2 js-indent-level 2 js-switch-indent-offset 2 node-add-modules-path t)
 (json :variables json-fmt-tool 'prettier)
 (markdown :variables markdown-command "pandoc")
 multiple-cursors nginx
 (org :variables org-enable-github-support t org-enable-bootstrap-support t org-enable-org-journal-support t org-enable-hugo-support t org-enable-trello-support t org-enable-jira-support t)
 osx pandoc prettier
 (python :variables python-test-runner 'pytest python-formatter 'black python-fill-column 99)
 react rust
 (shell :variables shell-default-height 30 shell-default-position 'bottom)
 shell-scripts spell-checking sql syntax-checking themes-megapack theming treemacs version-control xclipboard yaml)
  • System configuration features: JPEG RSVG IMAGEMAGICK GLIB NOTIFY ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS MODULES THREADS LCMS2

@duianto
Copy link
Contributor

duianto commented Jul 12, 2019

It's working for me.
The auto completion window appears after typing dot in .spacemacs.
And pressing Esc closes it.

System Info 💻

  • OS: windows-nt
  • Emacs: 26.2
  • Spacemacs: 0.300.0
  • Spacemacs branch: develop (rev. cd24a73)
  • Graphic display: t
  • Distribution: spacemacs
  • Editing style: vim
  • Completion: helm
  • Layers:
(autohotkey auto-completion emacs-lisp git helm markdown multiple-cursors org python syntax-checking treemacs version-control)
  • System configuration features: XPM JPEG TIFF GIF PNG RSVG SOUND NOTIFY ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS THREADS LCMS2

@cjolowicz
Copy link

Strange, I can't reproduce it either now. Will report back if it reoccurs.

@cjolowicz
Copy link

cjolowicz commented Jul 15, 2019

Ok, reproduced it now:

image

Keystrokes: c w ArtistDialog ESC j b w ArtistDialog ESC l l

Watch the indicator in the modeline change from green to yellow to see when ESC is pressed. The autocomplete window does not close. What's more, the j should move down a line in normal mode, but it is inserted as if still in insert mode.

The b then correctly moves back a word. We repeat the same sequence up to ESC. Again, the autocomplete window does not close. However, now the l correctly moves to the right, even though it happens under the same circumstances as the j earlier. The second l causes the autocomplete window to close.

@duianto
Copy link
Contributor

duianto commented Jul 15, 2019

I'm also able to reproduce it now, it seems to only occur when the completion popup shows file/dir paths.

At first I thought that it was because the cursor moves backwards by default and the popup might be trying to check for new candidates at the cursors new position.
But when I set the variable move back variable to nil (default is t):

(setq evil-move-cursor-back nil)

Then the same issue occurs. The popup remains/reopens.

Reproduction steps:

This can be seen in .spacemacs if I type:

  • "~/.e
    The popup shows candidates for files/dirs starting with .e, if you don't have any then try another letter, or just type . (period), or if you don't have any . files, try another letter.
  • While still in insert state, move backwards C-b and forwards C-f, the completion popup tries to match the path from the cursors position.
    "~/.| (cursor marked as the vertical bar | , positioned after the period) shows files starting with a period.
    "~/| (cursor after the slash) shows all files/directories in the home dir.
  • Move the cursor after the e in the string "~/.e".
  • Press Esc
    The completion popup blinks (it probably closes and reopens quickly) now showing matches for files starting with a period.

In this state with the completion popup open and the cursor in normal state, I'm able to move left h and right l (lower case L) to match on either ~/. or on ~/.e.
Moving to the left of the slash closes the popup.

You said that j inserts the character for you. But for me the cursor moves down and the completion popup closes, the equivalent happens with k.

@github-actions github-actions bot added the stale marked as a stale issue/pr (usually by a bot) label Jul 14, 2020
@emesterhazy
Copy link

I am experiencing this issue using the default auto-completion layer with no additional changes.

@duianto duianto removed the stale marked as a stale issue/pr (usually by a bot) label Aug 15, 2020
@xged

This comment was marked as duplicate.

@stephenkraemer
Copy link

stephenkraemer commented May 19, 2021

A (potentially very naive) quickfix for evil users could look roughly like

(defun my-escape-from-company ()
  (interactive)
  (company-abort)
  (evil-escape))

(with-eval-after-load 'company
  (key-chord-define company-active-map "jf" 'my-escape-from-company))

where you would need to replace "jf" with your escape sequence (e.g. "fd").

For me this currently works but this seems to be a somewhat elusive issue which may depend on the individual setup...

@upbqdn
Copy link

upbqdn commented May 15, 2022

The issue is still present.

A (potentially very naive) quickfix for evil users could look roughly like

That makes my autocompletion not show up at all. :/

@lebensterben
Copy link
Contributor

C-g should close auto-completion menu.

@upbqdn
Copy link

upbqdn commented May 16, 2022

That's what I do, but then I'm doing <escape> <C-g> or <C-g> <escape>, which is not ergonomic. I never need access to autocompletion after I press <escape>. It would be great to fix this, but I haven't found a way unfortunately.

I wonder how others deal with this. Do you also use <C-g> + <escape>?

@lebensterben
Copy link
Contributor

I only need to use C-g.

@upbqdn
Copy link

upbqdn commented May 18, 2022

I assume you use hybrid or vim mode as well. So you treat the closing of the autocompletion and the transition to normal mode as separate operations I guess. However, here you can see that the transition to normal mode doesn't work if you don't close the autocompletion first #4242 (comment). The same thing happens to me.

@e-matteson
Copy link

+1, this sometimes happens to me too on the most recent develop (4688cd7). When I hit escape the popup sometimes closes correctly, and sometimes flickers and then reappears and stays on the screen in normal mode.

Repository owner deleted a comment from github-actions bot Sep 29, 2022
@e-matteson
Copy link

This workaround has been working for me, and I haven't noticed any unintended side effects:

  (add-hook 'company-mode-hook
   (lambda ()
     (add-hook 'evil-normal-state-entry-hook
               (lambda ()
                 (company-abort)))))

@niontrix
Copy link
Contributor

niontrix commented May 24, 2023

Unfortunately @e-matteson's workaround isn't working for me, because it seems to call company-abort after every key stroke. So it closes the candidate list again and again. I think the problem lies in that evil-escape does not have an evil-escape--escape-insert-state function that would call company-abort like something that is done in evil-escape--escape-emacs-state for example.
See https://github.com/syl20bnr/evil-escape/blob/f4e9116bfbaac8c9d210c17ad488e0982291245f/evil-escape.el#L166
and https://github.com/syl20bnr/evil-escape/blob/f4e9116bfbaac8c9d210c17ad488e0982291245f/evil-escape.el#L260
The problem also seems especially prevalent when using lsp-mode and it's preventing me from using just "fd" to get back to normal mode.

As a workaround I came up with the following solution:

(with-eval-after-load 'evil-escape
  (defun company-abort-on-evil-escape ()
    (require 'company)
    (company-abort))
  (advice-add 'evil-escape-func :after #'company-abort-on-evil-escape))

niontrix pushed a commit to niontrix/spacemacs that referenced this issue Sep 7, 2023
Why?:
- Pressing Escape or calling evil-escape using "fd" or your configured
  keybinding does not close Company's auto-complete pop-up especially using LSP.
  See also: syl20bnr#4242

This change addresses the need by:
- Add hook to call company-abort when entering evil-normal-state
Copy link

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Please let us know if this issue is still valid!

@github-actions github-actions bot added the stale marked as a stale issue/pr (usually by a bot) label Jul 30, 2024
@smile13241324
Copy link
Collaborator

We are using our own fork of evil escape on latest develop if an escape is missing there I can easily add it. @niontrix is this still required?

@smile13241324 smile13241324 added Bug :-( and removed Auto-completion - Bug tracker - Found work-around stale marked as a stale issue/pr (usually by a bot) labels Sep 1, 2024
@smile13241324 smile13241324 self-assigned this Sep 1, 2024
@smile13241324
Copy link
Collaborator

I have just checked and this should be fixed already on develop when you upgrade your packages.
See ae3ead6 origin/master Make evil-escape escape from company too

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests