syl20bnr / spacemacs

A community-driven Emacs distribution - The best editor is neither Emacs nor Vim, it's Emacs *and* Vim!
http://spacemacs.org
GNU General Public License v3.0
23.62k stars 4.89k forks source link

Escape does not close autocomplete window. #4242

Open jordwalke opened 8 years ago

jordwalke commented 8 years ago

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 commented 8 years ago

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

Stebalien commented 8 years ago

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 commented 7 years ago

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

System Info :computer:

(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 commented 7 years ago

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 commented 7 years ago

Ah, indeed I can now reproduce this.

Strange 😕

cjolowicz commented 5 years ago

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 :computer:

duianto commented 5 years ago

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

System Info :computer:

cjolowicz commented 5 years ago

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

cjolowicz commented 5 years ago

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 commented 5 years ago

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:

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.

emesterhazy commented 4 years ago

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

xged commented 3 years ago

Me too.

stephenkraemer commented 3 years ago

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 commented 2 years ago

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 commented 2 years ago

C-g should close auto-completion menu.

upbqdn commented 2 years ago

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 commented 2 years ago

I only need to use C-g.

upbqdn commented 2 years ago

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 https://github.com/syl20bnr/spacemacs/issues/4242#issuecomment-511379029. The same thing happens to me.

e-matteson commented 1 year ago

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

e-matteson commented 1 year ago

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 commented 1 year ago

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))
github-actions[bot] commented 3 weeks ago

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!