diff --git a/contrib/company-mode/README.md b/contrib/company-mode/README.md
index 5fe69651c..2c8db909a 100644
--- a/contrib/company-mode/README.md
+++ b/contrib/company-mode/README.md
@@ -25,6 +25,18 @@ Basically, Spacemacs now has better Clang/C++ than any other Emacs config.
C-M-/ | filter the company dropdown menu
C-d | open minibuffer with documentation of thing at point in company dropdown
+## Settings
+
+To use tab instead of enter to complete your selection, `dotspacemacs/init` set `company-mode/use-tab-instead-of-enter-to-complete` to true, for example:
+```
+(defun dotspacemacs/init ()
+ "User initialization for Spacemacs. This function is called at the very
+ startup."
+ (setq company-mode/use-tab-instead-of-enter-to-complete t)
+ )
+
+```
+
## Maintainer
This contrib layer was written by and should be maintained by @trishume, everyone else is
diff --git a/contrib/company-mode/packages.el b/contrib/company-mode/packages.el
index 3035fe73e..fc2b91429 100644
--- a/contrib/company-mode/packages.el
+++ b/contrib/company-mode/packages.el
@@ -15,6 +15,9 @@
(defvar company-mode/enable-yas t
"Enable yasnippet for all backends.")
+(defvar company-mode/use-tab-instead-of-enter-to-complete nil
+ "use tab instead of enter for completion in company-mode")
+
(defun company-mode/backend-with-yas (backend)
(if (or (not company-mode/enable-yas) (and (listp backend) (member 'company-yasnippet backend)))
backend
@@ -25,15 +28,22 @@
(use-package company
:config
(progn
- (defun company-mode/keyword-cancel-transformer (candidates)
- "company frontend that cancels completion when a keyword is typed
+ ;; this isn't needed if we use tab instead of enter
+ (if (not company-mode/use-tab-instead-of-enter-to-complete)
+ (progn
+ (defun company-mode/keyword-cancel-transformer (candidates)
+ "company frontend that cancels completion when a keyword is typed
so that you don't have 'do' completed to 'downcase' in Ruby"
- (if (member company-prefix company-mode/completion-cancel-keywords) '() candidates))
+ (if (member company-prefix company-mode/completion-cancel-keywords) '() candidates))
+ (setq
+ company-transformers '(company-mode/keyword-cancel-transformer company-sort-by-occurrence))
+ )
+ (setq company-transformers '(company-sort-by-occurrence)) ;else
+ )
(setq company-idle-delay 0.0
company-minimum-prefix-length 2
company-require-match nil
- company-transformers '(company-mode/keyword-cancel-transformer company-sort-by-occurrence)
company-dabbrev-ignore-case nil
company-dabbrev-downcase nil
company-tooltip-flip-when-above t
@@ -42,10 +52,8 @@ so that you don't have 'do' completed to 'downcase' in Ruby"
(global-company-mode 1)
- ;; Fix integration of company and yasnippet
- (define-key company-active-map (kbd "TAB") nil)
- (define-key company-active-map (kbd "") nil)
- (define-key company-active-map [tab] nil)
+ ;; set completion key
+ (company-mode/set-completion-key)
(company-mode/setup-keybindings)
@@ -80,3 +88,19 @@ so that you don't have 'do' completed to 'downcase' in Ruby"
(define-key company-active-map (kbd "C-M-/") 'company-filter-candidates)
(define-key company-active-map (kbd "C-d") 'company-show-doc-buffer)
))
+
+(defun company-mode/set-completion-key ()
+ (if company-mode/use-tab-instead-of-enter-to-complete
+ (progn
+ (define-key company-active-map (kbd "TAB") 'company-complete-selection) ;have tab stand in for enter
+ (define-key company-active-map (kbd "") 'company-complete-selection)
+ (define-key company-active-map [tab] 'company-complete-selection)
+ (define-key company-active-map [return] nil) ;disable enter
+ (define-key company-active-map (kbd "RET") nil)
+ )
+ (progn
+ ;; Fix integration of company and yasnippet
+ (define-key company-active-map (kbd "TAB") nil)
+ (define-key company-active-map (kbd "") nil)
+ (define-key company-active-map [tab] nil)
+ )))