Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

About the fix for the interference between Company mode and Yasnippet

Tags:

emacs

plugins

Emacs wiki says:

Company does interfere with Yasnippet’s native behaviour. Here’s a quick fix: http://gist.github.com/265010

The code is the following:

(define-key company-active-map "\t" 'company-yasnippet-or-completion)

(defun company-yasnippet-or-completion ()
  (interactive)
  (if (yas/expansion-at-point)
      (progn (company-abort)
             (yas/expand))
    (company-complete-common)))

(defun yas/expansion-at-point ()
  "Tested with v0.6.1. Extracted from `yas/expand-1'"
    (first (yas/current-key)))

I placed that code in my .emacs and the following message appeared:

Warning (initialization): An error occurred while loading `c:/Documents and Settings/Alex.AUTOINSTALL.001/Application Data/.emacs.elc':

Symbol's value as variable is void: company-active-map

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the `--debug-init' option to view a complete error backtrace.

Do I have to place the fix code inside a YASnippet's .el file? or in my .emacs (which throws me an error)?

like image 792
alexchenco Avatar asked Jan 18 '10 15:01

alexchenco


1 Answers

The snippet you mentioned doesn't work any more anyway.

Here's a snippet that you can use instead:

(defun company-yasnippet-or-completion ()
  (interactive)
  (let ((yas-fallback-behavior nil))
    (unless (yas-expand)
      (call-interactively #'company-complete-common))))

To make sure that this is called instead of company-complete-common, use

(add-hook 'company-mode-hook (lambda ()
  (substitute-key-definition 'company-complete-common
                             'company-yasnippet-or-completion
                             company-active-map)))

Background: This locally changes the value of yas-fallback-behaviour, which causes yas to call company-complete-common if no completion is found.

like image 172
Clément Avatar answered Nov 08 '22 13:11

Clément