I am using company to auto-complete. It works generally fine, with the exception of the
M-(digit) shortcuts, which have no impact at all. I have no idea why.
This is my init code:
(defun company--my-insert-spc() (interactive)(company-abort)(insert-char #10r32)) (defun company--my-insert-dot() (interactive)(company-abort)(insert-char #10r46)) (use-package company :config (global-company-mode) (setq company-minimum-prefix-length 3) (setq company-auto-complete t) (setq company-show-numbers t) :bind (("C-<tab>" . company-complete) :map company-active-map ("ESC" . company-abort) ;; prevent company from completing on its own when we type regular characters ("SPC" . company--my-insert-spc) ("." . company--my-insert-dot) ) )
This is the result of
M-x describe-keymap company-active-map:
company-active-map ------------------ For more information check the manuals. Keymap that is enabled during an active completion. key binding --- ------- C-d company-show-doc-buffer C-g company-abort C-h company-show-doc-buffer TAB company-complete-common RET company-complete-selection C-s company-search-candidates C-w company-show-location ESC company-abort SPC company--my-insert-spc . company--my-insert-dot <down> company-select-next-or-abort <down-mouse-1> ignore <down-mouse-3> ignore <f1> company-show-doc-buffer <mouse-1> company-complete-mouse <mouse-3> company-select-mouse <remap> Prefix Command <return> company-complete-selection <tab> company-complete-common <up> company-select-previous-or-abort <up-mouse-1> ignore <up-mouse-3> ignore <remap> <scroll-down-command> company-previous-page <remap> <scroll-up-command> company-next-page
Indeed, the M-(digit) shortcuts are not there. Neither M-n or M-p. I am relatively new to emacs, and I don't know how to pinpoint the cause of this.
I did try to workaround this problem by explicitly setting again the shortcuts in the use-package
(dotimes (i 10) (define-key company-active-map (read-kbd-macro (format "M-%d" i)) 'company-complete-number))
... but I get a really baffling warning:
while: Key sequence M-0 starts with non-prefix key ESC. Why does ESC appear here? I also get this same warning for the M-n and M-p shortcuts:
(define-key company-active-map (kbd "M-n") 'company-select-next) (define-key company-active-map (kbd "M-p") 'company-select-previous)
This warning does appear to give a clue, but I can't figure out to what exactly.
Based on the warning above, I commented out the ESC keybinding to company-abort, and it made M-(digit) work as expected. So now the question is: why does this incompatibility between ESC and M-(digit) happen and how can I use both shortcuts?
The helpful comments by @TianxiangXiong and @phils identified the problem: ESC is the prefix char for M, so emacs will be confounded by the keybindings I've given it. This is a pity since I really wanted those shortcuts. However, based on this comment, I was able workaround this and get what I wanted by simply changing
("ESC" . company-abort) to
("<escape>" . company-abort) in the
:config. At least in my system (Ubuntu 16.04) this worked.