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) + )))